【发布时间】:2019-11-13 05:29:40
【问题描述】:
我有许多数据帧 (96),其中包含 0 和 1 的列。如果数据帧的任何一列中有多个“1”,我想用相等的分数替换 1,以便该列中的值之和为 1,如下面的代码所示。
v1 <- c(0, 1, 0, 1, 1, 0)
v2 <- c(0, 0, 1, 0, 0, 0)
v3 <- c(0, 0, 1, 1, 0, 0)
df1 <- data.frame(v1, v2, v3)
df2 <-data.frame(v3, v3, v1)
df3 <- data.frame(v1, v3, v1)
new.df1 <- t(apply(df1, 2, FUN = function(x) {
if(sum(x==1, na.rm=TRUE) ==2) replace(x, x==1, 0.5)
else if (sum(x==1, na.rm=TRUE)==3) replace( x, x==1, 1/3)
else x}))
new.df2 <- t(apply(df2, 2, FUN = function(x) {
if(sum(x==1, na.rm=TRUE) ==2) replace(x, x==1, 0.5)
else if (sum(x==1, na.rm=TRUE)==3) replace( x, x==1, 1/3)
else x}))
new.df3 <- t(apply(df3, 2, FUN = function(x) {
if(sum(x==1, na.rm=TRUE) ==2) replace(x, x==1, 0.5)
else if (sum(x==1, na.rm=TRUE)==3) replace( x, x==1, 1/3)
else x}))
我可以像上面的例子一样用蛮力创造我想要的东西,但必须有更好(更简洁)的方法。非常感谢您的帮助。
【问题讨论】:
-
将您的数据框放入
list。 See here for lots of detail.