r - 添加新列,其列名的值大于和小于平均值

标签 r dataframe

我有一个数据框:

set.seed(100)
A <- floor(runif(5, min=0, max=10))
B <- floor(runif(5, min=0, max=10))
C <- floor(runif(5, min=0, max=10))
D <- floor(runif(5, min=0, max=10))
df <- data.frame(A,B,C,D)
df$ms <- rowMeans(df)
df
  A B C D   ms
1 3 4 6 6 4.75
2 2 8 8 2 5.00
3 5 3 2 3 3.25
4 0 5 3 3 2.75
5 4 1 7 6 4.50

现在,当特定行中的值在 A 和 B 列中低于平均值且在 C 和 D 列中也高于平均值时,我想添加带有列名的列(较低和较高)。期望的结果:

  A B C D   ms  lower greater
1 3 4 6 6 4.75  A,B   C,D
2 2 8 8 2 5.00  A     C
3 5 3 2 3 3.25  B     NA
4 0 5 3 3 2.75  A     NA
5 4 1 7 6 4.50  A,B   C,D

我试图用 which() 来做这个但是我卡住了,你能给我一个提示吗?

lapply(apply(df,1, function(x) which(df$ms)),names)

最佳答案

您可以在基础 R 中使用 apply

df$lower <- apply(df, 1, function(x) paste(names(which(x[1:2] < x["ms"])), collapse = ", "))
df$greater <- apply(df, 1, function(x) paste(names(which(x[3:4] > x["ms"])), collapse = ", "))

  A B C D   ms lower greater
1 3 4 6 6 4.75  A, B    C, D
2 2 8 8 2 5.00     A       C
3 5 3 2 3 3.25     B        
4 0 5 3 3 2.75     A    C, D
5 4 1 7 6 4.50  A, B    C, D

关于r - 添加新列,其列名的值大于和小于平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72434350/

相关文章:

r - 转置以获取 R 中每个 ID 的单行

r - 如何在逻辑回归中以数字的形式获得ROC的最佳分界点

r - 使用 purrr::map 从列表中提取时出现意外行为

python - 在python中使用数据内容作为列创建表

r - 将数据表拆分为小表 R

r - 将列总和添加到表

r - 如何在 Shiny 中使用查询参数

python - pd.to_numeric 将整个系列转换为 NaN

python - Pyspark 按列分组元素并创建字典

r - 子集一个附加变量并将其附加到 R 中的前一个变量