我的数据框看起来像这样:
test1 test2 test3 day1 day2 day3
123 897 264 4 7 8
745 456 098 9 10 5
说我有一个矢量:
vector <- c('123','456')
我想添加一个新列,在test(x)中查询vector中的值,如果条件满足则返回day(x),使其如下所示:
test1 test2 test3 day1 day2 day3 testday
123 897 264 4 7 8 4
745 456 098 9 10 5 10
这是我到目前为止,但显然它不起作用...任何帮助将不胜感激:)
vector <- c('123','456')
x <- as.character(1:15)
df$test_day <- NA
df$test_day<- sapply(if (df[eventx],'%in%',vector){
df[prdayx]
}
答案 0 :(得分:0)
我们可以使用Map
。使用“test”列和“day”列对数据集进行子集。使用Map
,检查“test”列中的元素是否在vector
中。根据逻辑向量,得到相应的“日”。在这里,我们假设每行只有一个匹配。
df1$testday <- unlist(Map(function(x, y) y[x %in% vector], df1[1:3], df1[4:6]))
df1
# test1 test2 test3 day1 day2 day3 testday
#1 123 897 264 4 7 8 4
#2 745 456 98 9 10 5 10
或另一个选项是melt
为'long'格式,获取相应的'day'值,其中'test'值为%in%
'vector'并将其分配给新列
library(data.table)
v1 <- melt(setDT(df1), measure = patterns("^test", "^day"))[value1 %in% vector, value2]
df1[, testday := v1][]