在下面的R数据框中,我想将两列= NA的所有实例替换为两列= 0
所以我想改变这个:
Col 1 Col 2
1 1
3 2
NA NA
3 NA
NA 3
NA NA
并希望结果为:
Col 1 Col 2
1 1
3 2
0 0
3 NA
NA 3
0 0
答案 0 :(得分:1)
一种选择是在逻辑矩阵(resource "aws_db_instance" "test" {
identifier = "test"
allocated_storage = 1
storage_type = "aurora"
engine = "aurora"
engine_version = "5.6.10a"
instance_class = "db.t2.small"
name = "testdb"
username = "testadmin"
password = "xxxxx"
port = 3306
publicly_accessible = false
availability_zone = "us-east-2a"
security_group_names = []
vpc_security_group_ids = ["sg-xxxxx"]
db_subnet_group_name = "default-vpc-xxxxx"
parameter_group_name = "default.aurora5.6"
multi_az = false
backup_retention_period = 1
#backup_window = "08:48-09:18"
#maintenance_window = "sun:08:56-sun:09:26"
final_snapshot_identifier = "test-final"
}
上创建一个rowSums
的逻辑索引 - 这将为非NA提供!is.na(df1)
值,为NA提供TRUE
。通过执行FALSE
,具有0个N的行(即全部为FALSE)将返回0,而其他行将大于0.否定(rowSums
)!
将返回0,表示0和所有值其他FALSE)然后将行分配给0
vector
或者也可以通过不否定和与列数进行比较来以其他方式完成
另一种选择是遍历列,检查具有df1[!rowSums(!is.na(df1)),] <- 0
df1
# Col 1 Col 2
#1 1 1
#2 3 2
#3 0 0
#4 3 NA
#5 NA 3
#6 0 0
的NA,然后is.na
检查到逻辑Reduce
以将基于它的TRUE行分配给0
vector
答案 1 :(得分:1)
如果您希望显式引用列,您也可以执行
df <- data.frame(col1=c(1, 3, NA, 3, NA, NA), col2=c(1, 2, NA, NA, 3, NA))
df[is.na(df$col1) & is.na(df$col2), ] <- 0
df
## col1 col2
## 1 1 1
## 2 3 2
## 3 0 0
## 4 3 NA
## 5 NA 3
## 6 0 0
对于仅将特定列更改为零的情况,您可以通过括号内的索引或名称引用这些列。 E.g。
df <- data.frame(col1=c(1, 3, NA, 3, NA, NA), col2=c(1, 2, NA, NA, 3, NA), col3=rep(1, 6))
df[is.na(df$col1) & is.na(df$col2), c("col1", "col2")] <- 0
df
## col1 col2 col3
## 1 1 1 1
## 2 3 2 1
## 3 0 0 1
## 4 3 NA 1
## 5 NA 3 1
## 6 0 0 1