【发布时间】:2016-05-27 00:34:24
【问题描述】:
我有一个包含 200 行和 150 列的数据框。在这些列中,我希望更改大约 50 行和 100 列的 NA。
以下是我的数据框(一小部分)的示例:
>df
Bird Mammal Type
1 NA 1 A
2 1 0 B
3 1 0 A
4 0 NA A
5 NA 1 A
6 0 0 B
7 0 0 A
8 NA NA A
9 1 1 B
10 1 1 A
我想要的是,仅将“A”类型的所有 NA 更改为 0,而不是“B”类型。对于类型“B”,我希望一切都保持不变。
我尝试使用各种 ifelse 选项来做到这一点,但我认为我仍然没有掌握它的窍门。以下是我尝试过的一些事情:
a) 仅将列子集为列表:
try <- c(1,2)
for(i in 1:length(try)){
df[,try[i]] <- ifelse(df[,is.na(try[i])],0,df[,try[i]])
}
b) 对行和列进行子集化(这给了我一个数据框,所以当然 ifelse 没有运行)
【问题讨论】:
-
df[is.na(df$Mammal) & df$Type=="A","Mammal"]=0;df[is.na(df$Bird) & df$Type= ="A","鸟"]=0;
标签: r if-statement subset