R根据数据帧中的存在情况创建变量
对R来说是新的,并且一直在努力解决这个问题。我想创建一个新列,检查“text”列中是否存在一组单词(“foo”、“x”、“y”),然后将该值写入新列 我有一个看起来像这样的数据框:a->R根据数据帧中的存在情况创建变量,r,count,word,R,Count,Word,对R来说是新的,并且一直在努力解决这个问题。我想创建一个新列,检查“text”列中是否存在一组单词(“foo”、“x”、“y”),然后将该值写入新列 我有一个看起来像这样的数据框:a-> id text time username 1 "hello x" 10 "me" 2 "foo and y" 5 "you" 3 "nothing" 15 "everyone" 4 "x,y,fo
id text time username
1 "hello x" 10 "me"
2 "foo and y" 5 "you"
3 "nothing" 15 "everyone"
4 "x,y,foo" 0 "know"
正确的输出应为:
a2->
任何关于如何做到这一点的提示都将不胜感激 另一个想法是可怕的循环。。。如果你预先分配的话,也许不会那么糟糕吧
options(stringsAsFactors=F)
df1 <- data.frame(text = c("hello x", "foo and y", "nothing", "x,y,foo"))
newcol <- rep(NA, nrow(df1))
for(i in 1:nrow(df1))
newcol[i] <- paste( unlist(strsplit(df1$text[i], " "))[ grep("foo|x|y", unlist(strsplit(df1$text[i], " ")))], collapse=", ")
选项(stringsAsFactors=F)
df1这是使用apply
和sapply
的另一种方法:
df1 <- data.frame(text = c("hello x", "foo and y", "nothing", "x,y,foo"))
terms <- c('foo', 'x', 'y')
df1$keywordtag <- apply(sapply(terms, grepl, df1$text), 1, function(x) paste(terms[x], collapse=','))
df1
# text keywordtag
# 1 hello x x
# 2 foo and y foo,y
# 3 nothing
# 4 x,y,foo foo,x,y
这是df1吗?
df1 <- data.frame(text = c("hello x", "foo and y", "nothing", "x,y,foo"))
terms <- c('foo', 'x', 'y')
df1$keywordtag <- apply(sapply(terms, grepl, df1$text), 1, function(x) paste(terms[x], collapse=','))
df1
# text keywordtag
# 1 hello x x
# 2 foo and y foo,y
# 3 nothing
# 4 x,y,foo foo,x,y