繁体   English   中英

在r中使用if…else语句进行子集

[英]Subsetting with an if…else statement in r

我正在尝试对数据帧进行子集处理,以便在存在列名的情况下我对子集进行设置,但如果没有,则忽略。 对于示例,我将使用mtcars数据集。 我要完成的工作是,如果前三列中有一个列“ vs”子集,而vs.这将是一个名为“ vsdf”的日期框架。

df <- mtcars
if(colnames(df)=="vs") {
   vsdf <- df[,1,2,3,"vs"]
} else {
  NULL
}

任何帮助或指导将不胜感激。

您的代码有两个问题:

1)使用==

您想检查“ vs”是否是列名的一部分,但是由于使用的是==因此这意味着您要检查列名(是否存在)是否完全是“ vs”。 仅当只有一列,即“ vs”时,这才是正确的。 相反,您需要使用%in% ,如

if("vs" %in% colnames(d)) 
 {...}

2)分词语法df[,1,2,3,"vs"]

子集data.frame通常遵循以下语法

df[i, j] 

其中i表示行, j表示列。 由于要对columnns进行子集化,因此将在j进行此操作。 您所做的是为[.data.frame提供了更多的参数,因为您没有将这些值放入向量中。 向量可以是数字/整数或字符向量,但不能像您一样将两种形式混合使用。 相反,您可以像这样构建向量:

df[, c(names(df)[1:3], "vs")]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM