【发布时间】:2017-07-10 12:34:24
【问题描述】:
我有一个包含如下所示两列的数据集:
x1 | x2
ontime |ontime
Alate |ontime
ontime |Blate
Alate |Blate
我想要的输出是
x12
ontime
Alate
Blate
Alate
我试图编写多个 if 循环:
df$x12<- if(df$x1=='Alate' & df$x2=='ontime')
{
print('Alate')
}else if(df$x1=='ontime' & df$x2=='Blate')
{
print('Blate')
}else if(df$x1=='Alate' & df$x2=='Blate')
{
print('Alate')
}else
print('ontime')
但它不起作用,它只是为所有行打印“准时”并发出警告:
条件的长度 > 1,并且只使用第一个元素
【问题讨论】:
-
因为
if()没有向量化,可以尝试链接ifelse()或者使用mapply() -
只要
do.call(pmin, df)是character向量(即stringsAsFactors = FALSE在创建时指定)即可工作。 -
@DavidArenburg,您能解释一下这里的“pmin”是什么以及它是如何工作的吗?
-
我刚刚发现了您的模式,您希望基本上按字母顺序对结果进行排序,即
'Alate'始终排在第一位,然后是'Blate',然后是'ontime'。因此,我可以在整个 data.frame 上调用pmin,因为 data.frames 只是列表。但这只是一个技巧,如果你问我,对于一般情况,最好使用@Adamm 介绍的子集方法 -
@DavidArenburg,注意到,但这里的数据必须是一个列表,这适用于数据框中的任何列表。
标签: r if-statement