基于R中不同字段中的值添加新字段的有效方法

时间:2019-11-06 06:42:40

标签: r dplyr

我正在尝试基于现有字段创建一个新字段。基本上,如果现有字段中的行包含以#开头的字符串,请将该行中的值用作新字段中的行。如果不是,请在新字段的该行中使用现有字段中的最新值(带有#)。

抱歉,这听起来令人困惑,这是一个例子:

df = data.frame(V1 = c("#text1", 1, 3, 4, "#text2", 2, 4, 3, "#text3"), 
                stringsAsFactors = FALSE)

df_desired = data.frame(V1 = c("#text1", 1, 3, 4, "#text2", 2, 4, 3, "#text3"), 
                        newcol = c("#text1", "#text1", "#text1", "#text1", "#text2", "#text2", "#text2", "#text2", "#text3"), 
                        stringsAsFactors = FALSE)

这是我尝试的操作,但它返回错误:

df_new = df %>% mutate(newcol = ifelse(grep("#", df$V1[]) == 1, df$V1[],lag(df$V1[])))

谢谢!

1 个答案:

答案 0 :(得分:1)

如果其中存在V1,我们可以在newcol中复制"#"或复制NA,然后用tidyr::fill填充那些缺失的值。

library(dplyr)

df %>%
  mutate(newcol = ifelse(grepl("#", V1), V1, NA))  %>%
  tidyr::fill(newcol)

#      V1 newcol
#1 #text1 #text1
#2      1 #text1
#3      3 #text1
#4      4 #text1
#5 #text2 #text2
#6      2 #text2
#7      4 #text2
#8      3 #text2
#9 #text3 #text3