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

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

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

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

df_desired = data.frame(V1 = c("#text1",newcol = c("#text1","#text1",stringsAsFactors = FALSE)

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

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

谢谢!

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

如果其中存在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
本文链接:https://www.f2er.com/3154501.html

大家都在问