R 中数据框行中值的特定聚合
Specific aggregation of values in rows of a dataframe in R
这似乎是一项非常容易的任务,但我正在寻找一种智能解决方案来根据其他四个列 (a、b、c) 的值计算列 aggr , d) 在数据框的同一行内。
参见下面的示例:
df <- data.frame(a=c(1,1,1,1,1),
b=c(1,2,1,3,2),
d=c(1,2,3,3,3),
e=c(2,2,3,3,2),
aggr=c(1,2,1,3,2))
特殊条件为:
如果同一行中四个值中有两个以上的值为 3,则 aggr 值为 3;
如果同一行中的四个值中有两个以上的值为 2 或 3,则 aggr 值为 2;
如果不满足前面的条件,则aggr值为1。
df <- data.frame(a=c(1,1,1,1,1),
b=c(1,2,1,3,2),
d=c(1,2,3,3,3),
e=c(2,2,3,3,2))
df$aggr <- 1 + (rowSums(df == 3 | df == 2) > 2) + (rowSums(df == 3) > 2)
df
a b d e aggr
1 1 1 1 2 1
2 1 2 2 2 2
3 1 1 3 3 1
4 1 3 3 3 3
5 1 2 3 2 2
这似乎是一项非常容易的任务,但我正在寻找一种智能解决方案来根据其他四个列 (a、b、c) 的值计算列 aggr , d) 在数据框的同一行内。
参见下面的示例:
df <- data.frame(a=c(1,1,1,1,1),
b=c(1,2,1,3,2),
d=c(1,2,3,3,3),
e=c(2,2,3,3,2),
aggr=c(1,2,1,3,2))
特殊条件为:
如果同一行中四个值中有两个以上的值为 3,则 aggr 值为 3;
如果同一行中的四个值中有两个以上的值为 2 或 3,则 aggr 值为 2;
如果不满足前面的条件,则aggr值为1。
df <- data.frame(a=c(1,1,1,1,1),
b=c(1,2,1,3,2),
d=c(1,2,3,3,3),
e=c(2,2,3,3,2))
df$aggr <- 1 + (rowSums(df == 3 | df == 2) > 2) + (rowSums(df == 3) > 2)
df
a b d e aggr
1 1 1 1 2 1
2 1 2 2 2 2
3 1 1 3 3 1
4 1 3 3 3 3
5 1 2 3 2 2