因此,我一直在寻找与该主题类似的东西。我正在尝试在满足另一列条件的数据值中添加前缀。
我正在使用dplyr
和data.table
。
例如,我有这个数据框df1
,其中包含这些列。
Program | Violation
-------------------
CACF | SV-300
CACF | SV-101
DCH | SV-205
DCH | SV-302
CACF | SV-403
DCH | SV-302
我想在违规ID号之前添加DCH-,而不要更改另一列。我想对现有列进行此操作,以使现有df1
看起来像这样。
Program | Violation
-------------------
CACF | SV-300
CACF | SV-101
DCH | DCH-SV-205
DCH | DCH-SV-302
CACF | SV-403
DCH | DCH-SV-302
我一直在尝试paste0函数,但无济于事。
df1$Violation = paste0("DCH-"), df1$Program == "DCH"
我对R还是比较陌生,并且一直在Google搜索并四处寻找如何执行此操作。我敢肯定它非常简单,但是找不到与我正在寻找的相似概念的线程。如果有,请链接。
答案 0 :(得分:3)
我们可以使用case_when
library(dplyr)
df1 %>%
mutate(Violation = case_when(Program == "DCH" ~ paste0("DCH-", Violation),
TRUE ~ Violation))
答案 1 :(得分:3)
data.table
方式:
library(data.table)
setDT(df1)
df1[Program == "DCH", Violation := paste0(Program, "-", Violation)]
df1
Program Violation
1: CACF SV-300
2: CACF SV-101
3: DCH DCH-SV-205
4: DCH DCH-SV-302
5: CACF SV-403
6: DCH DCH-SV-302
或基数R:
df1[["Violation"]] <-
with(df1, ifelse(Program == "DCH", paste0(Program, "-", Violation), Violation))
df1
Program Violation
1 CACF SV-300
2 CACF SV-101
3 DCH DCH-SV-205
4 DCH DCH-SV-302
5 CACF SV-403
6 DCH DCH-SV-302
哪里
df1 <- data.frame(
Program = c("CACF", "CACF", "DCH", "DCH", "CACF", "DCH"),
Violation = c("SV-300", "SV-101", "SV-205", "SV-302", "SV-403", "SV-302"),
stringsAsFactors = FALSE
)
答案 2 :(得分:0)
我更喜欢使用@akrun的dplyr
答案。
有时最好使用“ Base R”
数据:
df1 <-
read.table(text = "
Program, Violation
CACF,SV-300
CACF,SV-101
DCH,SV-205
DCH,SV-302
CACF,SV-403
DCH,SV-302", sep = ",",
header = T,
stringsAsFactors = F)
解决方案: 使用标准索引选择要修改的案例:1)根据您的条件过滤行,然后2)选择列
df1[df1$Program=="DCH", "Violation"] <- # select the row and column using indexing [row, col]
paste0("DCH-", df1[df1$Program=="DCH", "Violation"])
df1
Program Violation
1 CACF SV-300
2 CACF SV-101
3 DCH DCH-SV-205
4 DCH DCH-SV-302
5 CACF SV-403
6 DCH DCH-SV-302