这最可能是一个非常基本的问题,但我有点卡住了。我有像这样的数据框(称为B)
mgrno AAPL BRK MSFT WYNN
0001 0 0 1 2
0003 1 0 3 0
0004 0 1 0 2
我想要做的是用1替换任何大于1的值,即结果看起来像
mgrno AAPL BRK MSFT WYNN
0001 0 0 1 1
0003 1 0 1 0
0004 0 1 0 1
所以我可以通过这个来获得这个
B <- as.data.frame(ifelse(B[,-1] == 0, 0, 1))
但是我丢失了mgrno列,所以要把这些碎片放回去,我需要做一些像
这样的事情temp <-B[1]
B <- as.data.frame(ifelse(B[,-1] == 0, 0, 1))
B <- cbind(temp, B)
必须有一个更简洁的方式。抱歉这两个人都有这个基本的东西。
答案 0 :(得分:1)
B[,-1]<-ifelse(B[,-1] == 0, 0, 1)
应该这样做。
答案 1 :(得分:0)
我们可以转换为数据集子集(不包括第一列)的逻辑矩阵,并将逻辑转换为二进制+
并将其分配回数据集
df1[-1] <- +(df1[-1] > 0)
或者更快的方法是
df1[-1] <- lapply(df1[-1], function(x) as.integer(x > 0))
答案 2 :(得分:0)
如果要在数据框/矩阵的所有单元格中映射self.
之类的函数,这是我以前使用的技巧。
不过我确信有更好的方法。
max(x,1)
第一列的名字有点偏,但这是一个更微不足道的问题。
B = data.frame(mgrno = c("001", "002", "003"),
AAPL = c(0,1,0),
BRK = c(0,0,1),
MSFT = c(1,3,0),
WYNN = c(2,0,2))
out = sapply(B[2:5], function(x) lapply(x, function(z) min(z,1)))
df = data.frame(B[,"mgrno"],out)
df