【问题标题】:Loop through all columns in a dataframe and sum if value is present in a certain column循环遍历数据框中的所有列,如果某列中存在值,则求和
【发布时间】:2015-12-03 16:34:48
【问题描述】:

下面是一个样本数据集:

y<-c("A1","B1", "C2", "A1", "B1","C1", "A1","B2", "C3", "A1", "B1", "C4", "A1", "B1","C4", "A1","B2", "C4", "A1","B1", "C4", "A1", "B1", "C4")
     test<- data.frame(matrix(y, nrow = 3, ncol = 8))
     colnames(test) <- c("Learn_1", "Car_1", "Car_2", "Fan_1", "Fan_2", "Fan_3","Kart_1", "God_1")
     test

有没有办法使用 apply 函数循环遍历每一列,但最后一列并总结只有在数据帧的最后一列中找到值时才出现的次数(因此使用我的最后一列作为索引搜索)?我知道我可以使用 for 循环来做到这一点,但是有点长,也许可以使用 apply 函数来做到这一点?

【问题讨论】:

  • 那么这个样本输入的期望输出到底是什么? (尽可能具体)
  • 我想要的输出是最后一列中存在的值总和的列表或表格,这些值出现在整个数据帧的其他列中。我的最终目标是将这个总和绘制在一个矩形中。其中矩形是最后一列中的基因总数,并分解为百分比阴影(不同颜色)。百分比阴影是显示 1 次、2 次、3 次等的值的比例......

标签: r for-loop dataframe sum apply


【解决方案1】:

如果您正在寻找每行与最后一列的值对应的值的次数,那么这可行:

apply(test,1,FUN= function(x) length(which(x[-8]==x[8])))

您可以轻松地将其调整为任意数量的列,甚至可以将其添加为新列。

编辑:

如果是针对整个数据集,那么你可以使用:

test<-as.matrix(test);
table(test[,-8])[match(test[,8],names(table(test[,-8])))]

在你自己的代码之后。

【讨论】:

  • Ouostiti 有没有办法做到这一点,但数据混淆了,可能对应于我正在检查的不同行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
相关资源
最近更新 更多