Обобщить диапазон столбцов в коде R для неизвестного номера столбца - PullRequest
0 голосов
/ 14 июня 2019

Я хотел бы запустить этот код в обобщенном виде.У меня есть переменные типа TN в столбцах от 12 до 25 в моем DF.Я хотел бы сохранить все свои данные и вычислить сумму действительных значений chr значений переменных типа TN по строкам в новой переменной с именем sumTN.Где данные отсутствуют в этих переменных у меня есть NA.

df$sumTN <- as.vector(rowSums(!is.na(df[, c(12:25)])))

Я хотел бы иметь этот код для других наборов данных, где переменные типа TN (которые я хотел бы получить из них по строкам) могут находиться в разных столбцах с разными диапазонами.

Я пробовал два разных способа получить это, но в обоих случаях я получил сообщение о том, что «x» должен быть массивом как минимум двух измерений ».Я понимаю, почему, но я не могу понять, как я мог решить эту проблему.Вот коды, которые я попробовал:

firstcol = which(colnames(df)=="TN_1")
lastcol = which(colnames(df)=="TN_14")
df$sumTN <- as.vector(rowSums(!is.na(df[, c(firstcol:lastcol)])))

df$sumTN <- as.vector(rowSums(!is.na(df[, c(grep("^TN_[0-9]+$", colnames(df)))])))

Любое решение будет оценено, спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Наконец-то я разобрался, как решить проблему. Я должен использовать библиотеку (dplyr), а затем код:

df$sumTN <- as.vector(rowSums(!is.na(select_if(df, grepl("^TN_[0-9]+$", colnames(df))==T))))
0 голосов
/ 14 июня 2019

Я так и думал.Код выглядел хорошо, но для некоторого фрейма данных он должен возвращать один столбец.Они преобразуются в векторы.Что вы можете сделать, это использовать drop=FALSE для подавления этого поведения.Кроме того, сделайте подмножество в isna Dataframe.

Попробуйте это

rowSums( (!is.na(df))[, c(grep("^TN_[0-9]+$", colnames(df))), drop=FALSE] )
...