首页 > 解决方案 > 如何将值向量分配给使用 %in% 运算符选择的行

问题描述

我有一个表格中的数据框:

X <- c(1, 2, 3, 4, 5, 6, 7)
V1 <- c("CHE", "CHE", "CHE", "FRA", "FRA", "FRA", "FRA")
V2 <- c("String1", "String2", "String2", "String1", "String3", "String4", "String3")
V3 <- c("String5", "String5", "String5", "String6", "String6", "String7", "String7")

df <- data.frame(X, V1, V2, V3)

如何基于 X 选择行X %in% c(2, 4, 5),然后在数据框中分配一个字符串向量?

我试过:

 df[df$X %in% c(2, 4, 5), c(2:4)] <- c("CHE", "Lago Maggiore", "X")

但它不能按预期工作:

 X            V1            V2            V3
1           CHE       String1       String5
2           CHE           CHE           CHE
3           CHE       String2       String5
4 Lago Maggiore Lago Maggiore Lago Maggiore
5             X             X             X
6           FRA       String4       String7
7           FRA       String3       String7

虽然预期的结果是:

X            V1            V2            V3
1           CHE       String1       String5
2           CHE Lago Maggiore             X
3           CHE       String2       String5
4           CHE Lago Maggiore             X
5           CHE Lago Maggiore             X
6           FRA       String4       String7
7           FRA       String3       String7

标签: rdataframe

解决方案


确保列属于“字符”类:

df <- data.frame(X, V1, V2, V3, stringsAsFactors = FALSE)

Data.frames 是列向量的列表。如果要分配给多个列,请传递一个列表(或 data.frame)而不是字符向量:

df[df$X %in% c(2, 4, 5), c(2:4)] <- list("CHE", "Lago Maggiore", "X")

#  X  V1            V2      V3
#1 1 CHE       String1 String5
#2 2 CHE Lago Maggiore       X
#3 3 CHE       String2 String5
#4 4 CHE Lago Maggiore       X
#5 5 CHE Lago Maggiore       X
#6 6 FRA       String4 String7
#7 7 FRA       String3 String7

推荐阅读