r - 如何将值向量分配给使用 %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
解决方案
确保列属于“字符”类:
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
推荐阅读
- file - 我怎样才能把所有东西放在一条线上?
- javascript - 将变量添加到 prepend() 方法内的 onClick() 事件
- perl - 可以连接两个使用不同输入记录分隔符的 Perl 脚本吗?
- c# - 电影票价格作业,如何结合两种票标的价格?
- node.js - Hyperledger Fabric nodejs REST api错误:流已删除
- c++ - c++ 使用getter函数时无法检索到正确的值
- android - Webview 不在 Android Pie 上加载 css
- java - 如何在 Java 中为多维数组实现自定义迭代器?
- php - 如何在一个查询中有多个 CURLOPT_USERAGENT?
- javascript - 在 JavaScript 中单击列表时更改下拉列表的方法