我有一个包含多列的csv,每个id有6行值,总共20个ID(120行) 我必须提取任何行的中位数高于阈值的行。
我通过将csv拆分为ID上的列表来尝试这一点 然后通过每列嵌套循环迭代并将中位数保存到另一个列表然后重建列表
j=2 for (each in lst) { i=1 column =22 while(column<30){
mlist[[i]]<-median(each[[column]])
column=column+1
i=i+1 } z=22 for (cols in mlist) {
if (cols>10^-6) {
DF[[j]][[2]]<-each$SubjectID[[2]]
DF[[j]][[z]]<-cols
}else{
DF[[j]][[2]]<-each$SubjectID[[2]]
DF[[j]][[z]]<-0}
z=z+1 } j=j+1 }
我们的想法是将中位数保存到列表中,然后将中位数填充到新列表中的相应列中。我的代码生成一个列表,其中行没有相同的元素,因此无法写入csv
答案 0 :(得分:0)
库dplyr
使分组和汇总变得非常简单。 (以后请提供样本数据)
df <- read.csv(text="
id,value
1,1
1,2
1,3
2,4
2,5
2,6
")
library(dplyr)
df %>%
group_by(id ) %>%
summarize(median_value = median(value))
# A tibble: 2 × 2
# id median_value
# <int> <int>
# 1 1 2
# 2 2 5