【发布时间】:2015-10-23 10:31:48
【问题描述】:
我想找出一个元素是否出现在数据框的一组中,然后将组内的每一行标记为如果出现则用 1 标记,如果不出现则标记为 0。
例如,假设我对值 1 是否出现在组中感兴趣。
df1 = data.frame(group = c(1,1,1,1,2,2,2,2,2,3,3,3),value = c(1,4,3,2,2,1,1,4,2,2,6,2))
> df1
group value
1 1
1 4
1 3
1 2
2 2
2 1
2 1
2 4
2 2
3 2
3 6
3 2
然后,我想创建一个新列,指定值 1 是否出现在该组中的任何位置。
它应该是这样的:
> df1
group value hasValue
1 1 1 yes
2 1 4 yes
3 1 3 yes
4 1 2 yes
5 2 2 yes
6 2 1 yes
7 2 1 yes
8 2 4 yes
9 2 2 yes
10 3 2 no
11 3 6 no
12 3 2 no
请注意,第 1 组和第 2 组中的每一行都有一个值“是”,因为该组中出现了 1,而第 3 组中的每一行都有一个“否”,因为第 3 组中从未出现过 1。
我使用某种 frankenstein 解决方案解决了这个问题,但我希望使用 dplyr 或 data.table 会有更快的解决方案。
x = dcast(df,group~value,value.var = "value")
vec = NULL
for(i in 1:nrow(x)){
if(x$`1`[i] > 0){
vec = c(vec,x$group[i])
}
}
df$hasValue = ifelse(df$group %in% vec,"yes","no")
【问题讨论】:
标签: r data-manipulation