Подмножество с оператором if....else в r

Я пытаюсь установить подмножество фрейма данных так, чтобы, если присутствует имя столбца, я подмножество, но если нет, я игнорировал. Для примера я буду использовать набор данных mtcars. То, что я пытаюсь сделать, это если подмножество столбцов "vs" в первых 3 столбцах и "против". Это будет дата с именем "vsdf".

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

Любая помощь или руководство будет принята с благодарностью.

1 ответ

Решение

Есть две проблемы с вашим кодом:

1) используя ==

Вы хотите проверить, является ли "vs" частью имен столбцов, но так как вы используете == это означает, что вы проверяете, являются ли имена столбцов (все присутствующие) точно "vs". Это будет верно только в том случае, если есть только один столбец, который называется "против". Вместо этого вам нужно использовать %in%, как в

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

2) синтаксис подсетей df[,1,2,3,"vs"]

подмножество data.frame обычно следует синтаксису

df[i, j] 

где i обозначает строки и j обозначает столбцы. Поскольку вы хотите подмножество столбцов, вы будете делать это в j, То, что вы сделали, это предоставить гораздо больше аргументов [.data.frame чем требуется, потому что вы не поместили эти значения в вектор. Вектор может быть числовым / целочисленным или символьным вектором, но не обе смешанные формы, как вы это сделали. Вместо этого вы можете построить вектор следующим образом:

df[, c(names(df)[1:3], "vs")]
Другие вопросы по тегам