我需要替换数据集中的字符串值,但我将其更改为的字符串取决于另一个变量的值。我以为我熟悉 if() 和 ifelse() 但这是我第一次使用字符向量
if() 不起作用,因为向量中有多个值符合我的标准。
ifelse() 不起作用,因为我认为它返回一个全新的向量,所以当我要求它返回一个数据帧时,它会变得很挑剔。
这是我开始使用的数据:
过滤变量 | 字符串 |
---|---|
A | 无需更改 |
A | 起始值 |
B | 无需更改 |
B | 起始值 |
我已经使用以下代码成功更改了我的字符串变量:
dat$String[dat$String == "Starting Value"] = "End Value A"
但这会改变每个“起始值”,无论我的过滤器值在做什么
这就是我陷入困境的地方:
dat = dat %>%
ifelse(dat$Filter_variable == "A",
dat$String[dat$String == "Starting Value" <- "End Value A",
dat$String[dat$String == "Starting Value"] <- "End Value B")
ifelse(., dat$Filter_variable == "A", dat$String[dat$String == ) 中的错误: 未使用的参数 (dat$String[dat$String == "A"] <- "End Value A")
也许我在这里误解了你,因为你没有分享预期的输出。但是,根据我的理解,您想要将
"Starting Value"
值更改为相应 "End Value"
的 Filter_variable
。
您可以通过以下方式使用
ifelse
:
df <- transform(df, String = ifelse(String == "Starting Value",
paste("End Value", Filter_variable), String))
df
# Filter_variable String
#1 A No change needed
#2 A End Value A
#3 B No change needed
#4 B End Value B
数据
df <- structure(list(Filter_variable = c("A", "A", "B", "B"), String = c("No change needed",
"Starting Value", "No change needed", "Starting Value")), class = "data.frame", row.names = c(NA, -4L))