rstudio - R Studio - 如何在数据框中随机位置的字符串/向量中间插入字符
问题描述
我正在尝试在数据帧中的向量的中间(不必在中间,但在中间)插入特殊字符 @、# 或 $。例如,在 12345 中插入 @ to 为 12@345 或 123@45 或 1234@5。
这就是我所拥有的:
> df <- data.frame(a=c(123,234,223214), b=c(78941014,0123,45645),
c=c(41,54524,56465))
> df
a b c
1 123 78941014 41
2 234 123 54524
3 223214 45645 56465
我想要这样的东西:
a b c
1 12@3 7894@1014 41@
2 23@4 123 @ 54@524
3 22@3214 4564@5 56@465
我试过
df8$a <- paste("@", df$a, sep="")
了,但它只是将@添加到第一个字符。我希望它介于两者之间。
提前感谢您的帮助!
解决方案
我认为你可以这样做:
df <- data.frame(a=c(123,234,223214), b=c(78941014,0123,45645),c=c(41,54524,56465))
df2 <- as.data.frame(sapply(df, as.character))
df.output <- data.frame(a = character(), b = character(), c = character() ,stringsAsFactors=FALSE)
ncol <- ncol(df)
nrow <- nrow(df)
for (i in 1:ncol) {
for (j in 1:nrow) {
df.output[i,j] <- sapply(Map(append, strsplit(as.character(df2[i,j]), ""), after = sample(1:nchar(df[i,j]), 1), "@"), paste, collapse = "")
}
}
df.output
a b c
1 1@23 78941@014 41@
2 234@ 123@ 5452@4
3 223@214 456@45 5646@5
您确实可以跳过 df.output 并直接使用 df2 来更新值,但我想以清晰的方式展示解决方案。
推荐阅读
- haskell - 使用 GHC 插件解析类型
- python - 在绘图选择上过滤散景数据表
- python - 在避免多处理python中的内存泄漏后会删除一个变量并重新创建它吗?
- mongodb - 联系人的 MongoDB Schema 优化
- python-3.x - numpy.genfromtxt() 无法读取标题
- javascript - 在 React JS 中更改子属性的位置
- java - SharedPreferences 未保存在 EditTexts 中
- javascript - 如何访问其他js文件的express模块,express模块已经包含在app.js中
- python - 使用其他表单元素在烧瓶中上传文件失败并出现 400 错误
- gradle - 如何正确运行 gradle 测试任务?