r - R中的快速循环和调节;根据另一列在列中插入新值
问题描述
我有大量数据,我想遍历数据并将结果插入到我命名的新列中action2
:
我的情况基于action
列:
if it contains "AA" OR "A1" then insert "As":
if it contains "BB" insert "Bs"
if it contains "AA" AND "C" then insert "AsC"
else insert the value in 'action' column
df<- read.table(text="
user action
1 AA
1 BB
1 ABCFF
1 A1B
2 AAB
2 BA1
2 AABC
3 M",header=T)
result df
user action action2
1 AA As
1 BB Bs
1 ABCFF ABCFF
1 A1B As
2 AAB As
2 BA1 As
2 AABC AsC
2 M M
我怎么能在 R 中做到这一点?(最好使用 dplyr 库)
解决方案
我认为case_when
会起作用,尽管正如@akrun 评论的那样,data.table
如果您需要速度,解决方案可能会更快。
df %>%
mutate(action2 = case_when(
grepl("AA.*C|C.*AA", action) ~ "AsC",
grepl("A[A1]", action) ~ "As",
grepl("BB", action) ~ "Bs",
TRUE ~ action)
)
# user action action2
# 1 1 AA As
# 2 1 BB Bs
# 3 1 ABCFF ABCFF
# 4 1 A1B As
# 5 2 AAB As
# 6 2 BA1 As
# 7 2 AABC AsC
# 8 3 M M
(为了让它按原样工作,我将你的电流转换action
为character
一个因素。由于你的数据只是玩具/样本,它可能不是你真实数据的因素。)
推荐阅读
- xcode - UISwitch 状态到 Firestore
- python - 使用 markdown2 转换后的 HTML 渲染效果不佳
- php - 将输出发送到标准输出和文件
- python - 由于 OSError,无法运行 python beautifulsoup 网页抓取程序
- arrays - 从C中的矩阵数组中打印元素?
- unity3d - 如何在 Unity 编辑器中创建自定义高度捕捉工具
- swiftui - SwiftUI NavigationView 布局问题
- django - Django - 当覆盖模型的 save() 函数时, super() 是否应该接受任何参数?
- c - 将 int 中的最后 10 位向左旋转
- javascript - 不要打破跨度,只打破一个空白