如果在特定编号的列(eventx)中值为true,则在名称(dayx)中具有相同x值的其他列中返回值

时间:2018-01-04 05:37:02

标签: r

我的数据框看起来像这样:

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]
}

1 个答案:

答案 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][]