Подмножество с оператором 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")]