首页 > 解决方案 > 如何使用 R 中其他列的值格式化字符串

问题描述

我需要使用以逗号分隔的其他列中的值进行一些字符串格式化。假设我有一个这样的数据框:

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

知道我该怎么做吗?

标签: rstringdataframestring-formatting

解决方案


words列非常适合sprintf. 尝试以下操作:

df$combined <- apply(df, 1, function(x) do.call(sprintf, 
                       c(as.list(strsplit(x[2], ',')[[1]]), fmt = x[[1]])))
df

#             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

我们在 上拆分arguments",",用于do.call将它们作为单独的参数传递sprintf并创建combined字符串。x[2]inapply指的是arguments列,x[1]而是words列。


推荐阅读