提问人:CBT2384 提问时间:10/30/2023 最后编辑:CBT2384 更新时间:10/30/2023 访问量:51
循环遍历 DataFrame 并向 R 中的单元格添加文本
Loop through dataframe and add text to a cell in R
问:
以 R 中的 ToothGrowth 数据集为例,我曾经使用以下格式创建一个 Comment 列:ToothGrowth$comment <- "Comment 1"
len supp dose comment
1 4.2 VC 0.5 Comment 1
2 11.5 VC 0.5 Comment 1
3 7.3 VC 0.5 Comment 1
我想遍历每一行并添加更多注释,以便最终的数据帧如下所示:
len supp dose comment
1 4.2 VC 0.5 Comment 1
Comment 2
Meow
2 11.5 VC 0.5 Comment 1
Comment 2
Meow
3 7.3 VC 0.5 Comment 1
Comment 2
Meow
到目前为止,我已经尝试了这 3 件事:
for i in 1:nrow(ToothGrowth):
newcom <- paste("Comment 2", "Meow", sep="\n")
addnewcom <- paste(ToothGrowth$comment[i], newcom, sep="\n", col="\n")
ToothGrowth$comment[i] <- addnewcom
for i in 1:nrow(ToothGrowth):
newcom <- paste("Comment 2", "Meow", sep="\n")
addnewcom <- paste(ToothGrowth$comment[i], cat(newcom[1]), sep="\n", col="\n")
ToothGrowth$comment[i] <- cat(addnewcom[1])
for i in 1:nrow(ToothGrowth):
newcom <- capture.outcome(cat(paste("Comment 2", "Meow", sep="\n")))
addnewcom <- capture.outcome(cat(paste(ToothGrowth$comment[i], newcom, sep="\n", col="\n")))
ToothGrowth$comment[i] <- addnewcom
我已经能够输出“Comment1\n\nComment2\nMeow”,但我正在努力输出实际的换行符。
谢谢!
答:
1赞
Tripartio
10/30/2023
#1
如果我正确理解你的意图,那将是
ToothGrowth$comment <- "Comment 1"
ToothGrowth$comment <- paste(ToothGrowth$comment, "\n", "Comment 2", "Meow", sep = "\n")
# Example of result: comment from first row
cat(ToothGrowth[1, ]$comment)
# Comment 1
#
#
# Comment 2
# Meow
在 R 中,如果对每一行执行完全相同的操作,通常最好避免循环。向量运算通常要快得多。
评论
0赞
CBT2384
10/30/2023
这似乎是正确的,但是当我查看最终的数据帧时,它显示“Comment1\n\nComment2\nMeow”而不是实际的新行。有没有办法解决这个问题?
0赞
Tripartio
10/30/2023
这是正确的。这就是字符串的样子。我已经编辑了我的答案,通过使用 cat() 函数将其打印出来来澄清这一点。
上一个:fgetc() 替换第一个字符
评论
ToothGrowth$comment <- "Comment 1\n\nComment 2\nMeow"
?还是作为第二步,)?ToothGrowth$comment <- paste0(ToothGrowth$comment, "\n\nComment 2\nMeow"