我有一个数据帧(从csv文件导入),如下所示
moose loose hoose
2 3 8
1 3 4
5 4 2
10 1 4
R代码应生成一个平均列,然后我想删除平均值<4的所有行,以便我最终得到:
moose loose hoose mean
2 3 8 4.3
1 3 4 2.6
5 4 2 3.6
10 1 4 5
然后应该结束为:
moose loose hoose mean
2 3 8 4.3
10 1 4 5
我怎样才能在R?
中这样做答案 0 :(得分:2)
dat2 <- subset(transform(dat1, Mean=round(rowMeans(dat1),1)), Mean >=4)
dat2
# moose loose hoose Mean
#1 2 3 8 4.3
#4 10 1 4 5.0
使用data.table
setDT(dat1)[, Mean:=rowMeans(.SD)][Mean>=4]
# moose loose hoose Mean
#1: 2 3 8 4.333333
#2: 10 1 4 5.000000
答案 1 :(得分:1)
我假设您的数据名为d
。然后你运行:
d$mean <- rowMeans(d) ## create a new column with the mean of each row
d <- d[d$mean >= 4, ] ## filter the data using this column in the condition
我建议你阅读有关在data.frame
中创建变量和过滤数据的内容。这些是非常常见的操作,您可以在许多环境中使用它们。
答案 2 :(得分:0)
您还可以使用within
,它允许您分配/删除列,然后返回转换后的数据。从df
开始,
> df
# moose loose hoose
#1 2 3 8
#2 1 3 4
#3 5 4 2
#4 10 1 4
> within(d <- df[rowMeans(df) > 4, ], { means <- round(rowMeans(d), 1) })
# moose loose hoose means
#1 2 3 8 4.3
#4 10 1 4 5.0