我有一个数据集(df1),我希望将其归一化为另一个具有相同列名的数据集(df2)的平均值。 以下是df1的示例:
Rownames Region A Region B Region C
M1 4 5 6
M2 3 4 5
M3 2 5 6
但是,如果平均值低于df2中的某个数字,例如0.5,我想在df1中删除该列。我已经在 avgs 中找到了df2的平均值列表。
df2的平均值:
Region A Region B Region C
Avgs 0.1 3 5
因此,如果df2的平均值为0.1,则应删除区域A.
Rownames Region B Region C
M1 5 6
M2 4 5
M3 5 6
这是我迄今为止为此目的所拥有的代码:
for(i in colNames.df1){
if(avgs[[i]]<0.5){df1 <- subset(x = df1, select = -i)}
我认为这会有效,但我得到:&#34;对一元运算符的无效参数&#34; 关于
select = -i
我假设它是因为它是一个字符串,但我不知道如何解决这个问题。或许还有另一种方法,我没有想到这样做而没有子集?
谢谢!
答案 0 :(得分:1)
您可以一步完成:
df1 <- df1[, -which(avgs < 0.5)]
这将从df1
中删除avgs
中的列(按索引),which()
中的对应元素小于0.5。
正如@akrun在评论中指出的那样,如果avgs
的元素的值低于0.5,则使用df1 <- df1[, !(avgs < 0.5)]
会失败。要解决这个问题,您也可以使用
avgs
当df1
中的值小于0.5时,这将使您与之前的方法相同。此方法会从条件!(avgs < 0.5)
求值为FALSE
的{{1}}中删除相应的列。但与之前的方法不同,如果所有案例都返回TRUE
,则不会删除任何列。
你说错误是因为i
是一个字符串。这种方法完全避免了这种情况。