为R中的每一行运行一个循环
作为一个初学者,我一直在努力做到这一点。我有一个文本,我想有一个数据框(或矩阵,如果这更容易)的行条目替换一些部分。 我有一个示例数据集,如下所示:为R中的每一行运行一个循环,r,row,R,Row,作为一个初学者,我一直在努力做到这一点。我有一个文本,我想有一个数据框(或矩阵,如果这更容易)的行条目替换一些部分。 我有一个示例数据集,如下所示: x y z 1 5 apple green 2 7 banana yellow 3 13 mango red 我被这件事困住了: for (x in mydata[["x"]]) { for (y in mydata[["y"]]) { for (z in mydata[["z"]
x y z
1 5 apple green
2 7 banana yellow
3 13 mango red
我被这件事困住了:
for (x in mydata[["x"]]) {
for (y in mydata[["y"]]) {
for (z in mydata[["z"]]) {
print(paste("The year is", x, y,"color", z))
}
}
}
然而,这使得文本具有所有可能的组合。
我想得到:
"The year is 5 apple color green"
"The year is 7 banana color yellow"
"The year is 13 mango color red"
我尝试了重复,for,if,while,但我得到了第一个、最后一个或全部组合返回。
我如何定义每行只需要一句话
谢谢你的帮助。我们不需要循环,因为粘贴是矢量化的
paste("This year is", df1$x, df1$y, "color", df1$z)
或者使用sprintf
sprintf("This year is %s %s color %s", df1$x, df1$y, df1$z)
或者不调用“df1”3次
do.call(sprintf, c(df1, fmt = "This year is %s %s color %s"))
#[1] "This year is 5 apple color green" "This year is 7 banana color yellow"
#[3] "This year is 13 mango color red"
OP的post使用嵌套的
for
循环,因此我们得到了所有的组合,而不是预期的组合。我们可以在行序列上循环,使用它作为索引来提取每列的元素并粘贴它
for(i in seq_len(nrow(df1))){
print(paste("This year is", df1$x[i], df1$y[i], "color", df1$z[i]))
}
#[1] "This year is 5 apple color green"
#[1] "This year is 7 banana color yellow"
#[1] "This year is 13 mango color red"
数据
df1添加解决方案仅仅是因为尚未提及apply
函数系列
我的单线解决方案:
df = data.frame(x=c(5,7,13), y = c('apple', 'banana','mango'), z = c('green', 'yellow', 'red'))
apply(df,1, function(a) paste("This year is", a[1], a[2], "color", a[3]) )
其中:
[1] "This year is 5 apple color green"
[2] "This year is 7 banana color yellow"
[3] "This year is 13 mango color red"
此外,通过以下方法,一次打印一行输出也很容易:
writeLines(paste(...))
writeLines(paste(...))