我需要做一些字符串格式化使用值从其他列由逗号分隔.让我们假设我有一个 Dataframe 这样:
words <- c('%s + %s equal %s', '%s + %s equal %s')
arguments <- c('1,1,2', '2,2,4')
df <- data.frame(words, arguments)
df
words arguments
1 %s + %s equal %s 1,1,2
2 %s + %s equal %s 2,2,4
字符串
我需要一个这样的结果:
words arguments combined
1 %s + %s equal %s 1,1,2 1 + 1 equal 2
2 %s + %s equal %s 2,2,4 2 + 2 equal 4
型
你知道我该怎么做吗?
3条答案
按热度按时间x6h2sr281#
words
列非常适合sprintf
。请尝试以下操作:字符串
我们将
arguments
的值拆分到","
上,使用do.call
将它们作为sprintf
的单独参数传递,并创建combined
字符串。apply
中的x[2]
引用arguments
列,而x[1]
用于words
列。gxwragnw2#
非常类似于Ronak的解决方案,但为了简洁起见使用了一些
data.table
和purrr
:字符串
6ju8rftf3#
正如@Spacedman正确指出的那样,以前的解决方案不再起作用了。这也是正确的,应该尽可能避免eval-parse解决方案。谢谢@dash2:你说得很好。
因此,这里遵循一个新的tidyverse和R-基地的解决方案。
使用
tidyverse
具体为:
dplyr
、purrr
、stringr
字符串
注意,
do.call
的第二个参数必须是被调用函数的参数列表(在本例中为sprintf
)。这就是为什么words
的每一项都要与arguments
的每一项合并(c
),然后强制合并为一个列表(as.list
)。使用Base R
型
让我们一步一步来看看解决方案:
型