循环遍历 DataFrame 并向 R 中的单元格添加文本

Loop through dataframe and add text to a cell in R

提问人:CBT2384 提问时间:10/30/2023 最后编辑:CBT2384 更新时间:10/30/2023 访问量:51

问:

以 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”,但我正在努力输出实际的换行符。

谢谢!

R DataFrame 变量赋值 换行符 连接

评论

1赞 deschen 10/30/2023
我不完全是父亲,你的最终目标是什么?是否只想将示例中描述的相同注释添加到每一行?或者是否会有一些逻辑会根据其他列值添加不同的 (!) 注释?
1赞 deschen 10/30/2023
因为目前看起来您要添加的评论应该有换行符。
0赞 Jon Spring 10/30/2023
ToothGrowth$comment <- "Comment 1\n\nComment 2\nMeow"?还是作为第二步,)?ToothGrowth$comment <- paste0(ToothGrowth$comment, "\n\nComment 2\nMeow"
0赞 CBT2384 10/30/2023
我的最终目标是在新行上添加一个空行,注释#,在另一行上添加实际注释。没有逻辑或条件。对于我的实际数据,我正在梳理两列的内容,但为了简单起见,我只想在示例中添加“\n\nComment 2 \n Meow”。

答:

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() 函数将其打印出来来澄清这一点。