r - 如何使用 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
知道我该怎么做吗?
解决方案
该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
列。
推荐阅读
- c - 如何拒绝字母数字命令行参数(即 ./main 20x),而不是纯数字参数(即 ./main 20)?(在 C 中)
- python - 如果它包含管道,则在熊猫数据框单元格中格式化字符串
- javascript - 订阅 JS 谷歌地图中的数据
- reactjs - React Native Text 组件未呈现
- excel - 使用 VBA Excel 在文本文件中显示搜索文本
- python - 在 conda 环境中安装 pip 包时出错
- c# - Unity3d:通过检查器添加公共脚本
- jenkins - 在 Jenkins 管道中,如何获取在当前构建和上次成功构建之间更改的文件?
- html - 导航项目不正确
- javascript - 如何在 p5.js 中播放声音