在R中,我有一个包含大约700个属性和6000行的数据帧。 每个单元格保存0到5之间的数字,表示发生了多少次。但不是数字,我想有/不。
我知道我可以做的每个属性
df$col <- ifelse(df$col>=1, "Yes", "No")
但是,如果不进行循环,对所有列执行此操作的最佳方法是什么?
答案 0 :(得分:1)
您可以使用sapply
:
set.seed(2017);
df <- as.data.frame(matrix(sample(0:4, 20, replace = T), ncol = 5));
df;
# V1 V2 V3 V4 V5
#1 4 3 2 0 1
#2 2 3 1 2 3
#3 2 0 3 2 4
#4 1 2 0 1 4
df[] <- sapply(df, function(x) ifelse(x >= 1, "Yes", "No"));
df;
# V1 V2 V3 V4 V5
#1 Yes Yes Yes No Yes
#2 Yes Yes Yes Yes Yes
#3 Yes No Yes Yes Yes
#4 Yes Yes No Yes Yes
答案 1 :(得分:1)
data.frame(ifelse(df >= 1, 'Yes', 'No'))
(如果需要,分配给df
)
默认情况下,stringsAsFactors
的{{1}}参数为data.frame
,因此这会为您提供因素。