Объединение нескольких столбцов значений вместе в R

Поэтому я написал скрипт, который позволяет мне складывать значения в одном столбце. Однако проблема, с которой я сталкиваюсь, заключается в том, что мои данные содержатся в нескольких столбцах различной длины и содержат NA. У меня есть сценарий для биннинга:

bin <- seq(min(data[, 1]), max(data[, 1]), by = 0.0005)
binnedData <- tapply(data[, 1], cut(data[, 1], breaks = bin), median)

Мне было интересно, есть ли способ, которым я мог бы объединить все значения из всех столбцов в один массивный длинный столбец, чтобы я мог в основном запустить это, или есть ли способ, которым я могу настроить это так, чтобы я мог запустить его на своих 1000 х 1000 матрица

Это взято из части моих данных:

102.23144 123.23242 102.23145
103.23144 123.23242 102.36563
103.83637        NA 102.36356
104.23225        NA 102.23423
105.87890        NA        NA

И ожидаемый результат с просто объединением значений столбца:-

102.23144 
103.23144 
103.83637      
104.23225   
105.87890
123.23242
123.23242
102.23145
102.36563
102.36356
102.23423

И результат с биннингом:-

(102.0000 - 102.0005) - Median of all values that fall into bin
(102.0005 - 102.0010) - Median of all values that fall into bin
(102.0015 - 102.0020) - Median of all values that fall into bin

Спасибо

2 ответа

Решение

Вы пробовали использовать функцию melt из пакета reshape2.

Вот некоторые из ваших тестовых данных:

test <- data.frame(V1=c(102.2314,103.2314,103.8364,104.2322,105.8789),
                   V2=c(123.2324,123.2324,NA,NA,NA),
                   V3=c(102.2314,102.3656,102.3636,102.2342,NA)
                  )

> test
        V1       V2       V3
1 102.2314 123.2324 102.2314
2 103.2314 123.2324 102.3656
3 103.8364       NA 102.3636
4 104.2322       NA 102.2342
5 105.8789       NA       NA

а затем использовать функцию расплава -

test_m <- melt(test)

Но есть АН.

> test_m
   variable    value
1        V1 102.2314
2        V1 103.2314
3        V1 103.8364
4        V1 104.2322
5        V1 105.8789
6        V2 123.2324
7        V2 123.2324
8        V2       NA
9        V2       NA
10       V2       NA
11       V3 102.2314
12       V3 102.3656
13       V3 102.3636
14       V3 102.2342
15       V3       NA

Итак, теперь тот же шаг с этим фильтром -

test_m<- melt(test)[which(!(is.na(melt(test)[,2]))),]

> test_m
   variable    value
1        V1 102.2314
2        V1 103.2314
3        V1 103.8364
4        V1 104.2322
5        V1 105.8789
6        V2 123.2324
7        V2 123.2324
11       V3 102.2314
12       V3 102.3656
13       V3 102.3636
14       V3 102.2342

Итак, НС удалены. Вы можете выбрать только 2-й столбец данных, чтобы удалить имя переменной.

Если у тебя есть data.frameэто может быть сделано с stack от base R

na.omit(stack(test))[,1,drop=FALSE]
#    values
#1  102.2314
#2  103.2314
#3  103.8364
#4  104.2322
#5  105.8789
#6  123.2324
#7  123.2324
#11 102.2314
#12 102.3656
#13 102.3636
#14 102.2342

Или же

data.frame(V1= unname(na.omit(unlist(test))))

данные

test <- structure(list(V1 = c(102.2314, 103.2314, 103.8364, 104.2322, 
105.8789), V2 = c(123.2324, 123.2324, NA, NA, NA), V3 = c(102.2314, 
102.3656, 102.3636, 102.2342, NA)), .Names = c("V1", "V2", "V3"
), class = "data.frame", row.names = c("1", "2", "3", "4", "5"))
Другие вопросы по тегам