我有一份名单和一份数据。数据框架有两列,一列用于歌曲,一列用于歌曲类型。我有首首歌的单子。
allsongs <- data.frame("Song" = c(1, 2, "3A", "9C", 6, 5, "12B", "32A", 18, 27, 24, "1D"),
"Type" = 0)
type1songs <- list(c(1, 2, "32A", 6, "1D"))我想要使用这个列表将"1“的值应用到该列表中所有歌曲的$Type中。
所以它看起来会像这样。
Song Type
1 1 1
2 2 1
3 3A NA
4 9C NA
5 6 1
6 5 NA
7 12B NA
8 32A 1
9 18 NA
10 27 NA
11 24 NA
12 1D 1我该怎么做?
发布于 2020-10-06 22:31:44
我们可以使用match或%in% - match返回匹配位置,默认情况下nomatch是NA。获得匹配索引后,使用> 0创建逻辑向量,并将其强制为二进制(+)。
allsongs$Type <- +(match(allsongs$Song, type1songs[[1]]) > 0)-output
allsongs
# Song Type
#1 1 1
#2 2 1
#3 3A NA
#4 9C NA
#5 6 1
#6 5 NA
#7 12B NA
#8 32A 1
#9 18 NA
#10 27 NA
#11 24 NA
#12 1D 1或使用data.table选项
library(data.table)
setDT(allsongs)[Song %in% type1songs[[1]], Type := 1]或使用base R
allsongs$Type[allsongs$Song %in% type1songs[[1]]] <- 1https://stackoverflow.com/questions/64234654
复制相似问题