【发布时间】:2018-04-01 16:40:26
【问题描述】:
我正在尝试在我的 tibble 中创建一个新列,用于收集和格式化在所有其他列中找到的所有单词。如果可能的话,我想使用 dplyr 来做到这一点。 原始数据框:
df <- read.table(text = " columnA columnB
1 A Z
2 B Y
3 C X
4 D W
5 E V
6 F U " )
作为一个简化的例子,我希望做这样的事情:
df %>%
rowwise() %>%
mutate(newColumn = myFunc(.))
让输出看起来像这样:
columnA columnB newColumn
1 A Z AZ
2 B Y BY
3 C X CX
4 D W DW
5 E V EV
6 F U FU
当我在我的代码中尝试这个时,输出看起来像:
columnA columnB newColumn
1 A Z ABCDEF
2 B Y ABCDEF
3 C X ABCDEF
4 D W ABCDEF
5 E V ABCDEF
6 F U ABCDEF
myFunc 应该将一行作为参数,但是当我尝试使用 rowwise() 时,我似乎将整个 tibble 传递到函数中(我可以通过将打印函数添加到 myFunc 中看到这一点)。
如何只传递一行并迭代地执行此操作,以便将函数应用于每一行?这可以用 dplyr 完成吗?
编辑:
为了我的问题,示例中的myFunc 进行了简化。实际函数如下所示:
get_chr_vector <- function(row) {
row <- row[,2:ncol(row)] # I need to skip the first row
words <- str_c(row, collapse = ' ')
words <- str_to_upper(words)
words <- unlist(str_split(words, ' '))
words <- words[words != '']
words <- words[!nchar(words) <= 2]
words <- removeWords(words, stopwords_list) # from the tm library
words <- paste(words, sep = ' ', collapse = ' ')
}
【问题讨论】:
-
你能分享
myFunc吗?df长什么样子? -
也许我理解错了,
df %>% mutate(newColumn=paste0(columnA, columnB))没有提供你想要的结果吗? -
为了我的问题,我简化了我的功能。我正在使用的实际功能已编辑到我的帖子中。
-
@BryanStafford 是否必须使用自己的函数?
-
@DataTx 不一定。我希望用我自己的来保持整洁。