在R中将多列值组合在一起
Combining multiple columns of values together in R
所以我编写了一个代码,允许我将值放入单个列中。但是,我遇到的问题是我的数据包含在多个列中,所有列的长度都不同,并且其中包含 NA。我用于装箱的脚本是这样的:-
bin <- seq(min(data[, 1]), max(data[, 1]), by = 0.0005)
binnedData <- tapply(data[, 1], cut(data[, 1], breaks = bin), median)
我想知道是否有一种方法可以将所有列的所有值合并到一个巨大的长列中,这样我基本上就可以 运行 这个,或者是否有一种方法可以调整它我可以 运行 在我的 1000 x 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
谢谢
您是否尝试过使用 reshape2 包中的 melt 函数。
这是您的一些测试数据:
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)
但是有NA。
> 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
因此,NA 已删除。您可以 select 只有数据的第二列删除变量名称列。
如果您有 data.frame
,这可以通过 base R
中的 stack
来完成
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"))
所以我编写了一个代码,允许我将值放入单个列中。但是,我遇到的问题是我的数据包含在多个列中,所有列的长度都不同,并且其中包含 NA。我用于装箱的脚本是这样的:-
bin <- seq(min(data[, 1]), max(data[, 1]), by = 0.0005)
binnedData <- tapply(data[, 1], cut(data[, 1], breaks = bin), median)
我想知道是否有一种方法可以将所有列的所有值合并到一个巨大的长列中,这样我基本上就可以 运行 这个,或者是否有一种方法可以调整它我可以 运行 在我的 1000 x 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
谢谢
您是否尝试过使用 reshape2 包中的 melt 函数。
这是您的一些测试数据:
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)
但是有NA。
> 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
因此,NA 已删除。您可以 select 只有数据的第二列删除变量名称列。
如果您有 data.frame
,这可以通过 base R
stack
来完成
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"))