R语言 根据条件将一列中的值替换为另一列中的值

vx6bjr1n  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(683)

下面我做错了什么?我正在尝试创建一个新列,如果它匹配某个字符串,则用匹配行Col_2中的值替换Col_1的值,否则返回Col_1的值。
有许多例子-主要是thisthis,但它们似乎在 Dataframe 的第1列上操作-下面的代码可以很好地工作。我特意在第1列中插入了一个插槽,以反映我的数据需要:

我所尝试的

library(dplyr)
df <- data.frame(cbind('num' = c(1,2,3,4), 
                 'tenure'   = c('Unknown', 'a', 'Unknown', 'b'),
                 'tenure_2' = c('t', 's', 'u', 'v')))

df['new_col'] <- df %>%
  mutate(tenure = ifelse(tenure == "Unknown", tenure_2, tenure))

为什么它选择第一列?我很高兴听到更好的解决方案,我可能忽略了。

jc3wubiy

jc3wubiy1#

您试图同时使用basedplyr语法。ifelse()返回一个向量,可以使用df['new_col'] <- ifelse(...)将其赋值给单个列。另一方面,mutate()返回一个完整的 Dataframe ,您希望将其赋值为df <- df %>% mutate(...)。以下两种方法都可以:

## assigning the column to the data frame
df['new_col'] <- ifelse(df$tenure == "Unknown", df$tenure_2, df$tenure)
# (same thing using `with()` 
df['new_col'] <- with(df, ifelse(tenure == "Unknown", tenure_2, tenure))

## using `mutate` to assign the data frame
df <- df %>%
  mutate(new_col = ifelse(tenure == "Unknown", tenure_2, tenure))
myss37ts

myss37ts2#

使用data.table

library(data.table)
 setDT(df)[tenure == "Unknown", tenure := tenure_2]

相关问题