Как выполнить подмножество, взяв только информацию от тех, кто имеет определенное значение в столбце - PullRequest
0 голосов
/ 02 июля 2019

У меня очень большой набор данных, и я хотел бы создать новую таблицу, которая содержит информацию только из столбцов, которые равны определенному числу.Это поддельный набор данных, но давайте назовем его mydata. пример данных

Мой фактический набор данных намного больше этого, но в основном это то, что я хочу видеть

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Если ваш файл данных очень большой, и вы хотите, чтобы только строки соответствовали определенному критерию, пакет sqldf может фильтровать, пока он считывает данные.

Вот пример использования.Я создам двоичный столбец во встроенном наборе данных iris и запишу новую таблицу на диск.

library(sqldf)

set.seed(1234)
iris1 <- iris
iris1$V4 <- rbinom(nrow(iris1), 1, 0.5)
write.table(iris1, "iris3.dat", sep = ",", quote = FALSE, row.names = FALSE)

Теперь прочитайте данные и отфильтруйте только те строки, где V4 == 0.

# set up file connection
iris3 <- file("iris3.dat")
df1 <- sqldf('select * from iris3 where "V4" = 0')
close(iris3)

Сравните с результатом subset.

df2 <- subset(iris1, V4 == 0)
row.names(df2) <- NULL
all.equal(df1, df2)
#[1] "Component “Species”: Modes: character, numeric"                      
#[2] "Component “Species”: Attributes: < target is NULL, current is list >"
#[3] "Component “Species”: target is character, current is factor"

Окончательная очистка.

unlink("iris3.dat")
rm(iris1, df1, df2)
0 голосов
/ 02 июля 2019

Мы можем subset строки набора данных на основе значений '0' в 'V4', в то время как select в столбцах с 1 по 4

subset(df1, V4 == 0, select = 1:4)
...