R 按列组合应用的结果
我有一个数据框。在我的应用程序中,此数据框的维度和列名是先验未知的,但例如:R 按列组合应用的结果,r,R,我有一个数据框。在我的应用程序中,此数据框的维度和列名是先验未知的,但例如: v1 <- sample(1:100, 5, replace=F) v2 <- sample(1:100, 5, replace=F) v3 <- sample(1:100, 5, replace=F) sample_matrix <- data.frame(v1, v2, v3) 但是,如果函数只返回1个参数,则它会执行与所需相反的操作: dummy_func2 <
v1 <- sample(1:100, 5, replace=F)
v2 <- sample(1:100, 5, replace=F)
v3 <- sample(1:100, 5, replace=F)
sample_matrix <- data.frame(v1, v2, v3)
但是,如果函数只返回1个参数,则它会执行与所需相反的操作:
dummy_func2 <- function(x) c(1)
data.frame(t(apply(sample_matrix, 1, dummy_func2))
X1 X2 X3 X4 X5
1 1 1 1 1 1
dummy\u func2您可以使用lappy()
,这样您总是可以得到一个结果列表:
sample_matrix<-t(sample_matrix)
dummy_func1 <- function(x) c(1, 2)
a <- lapply(as.data.frame(sample_matrix) , dummy_func1)
t(data.frame(a))
[,1] [,2]
v1 1 2
v2 1 2
v3 1 2
dummy_func2 <- function(x) c(1)
b<- lapply(as.data.frame(sample_matrix), dummy_func2)
t(data.frame(b))
[,1]
v1 1
v2 1
v3 1
sample\u matrix非常感谢!使用lapply是一个非常好的主意。我唯一关心的是,如果数据集很大,太多的转置将不会非常有效;比如说big说到换位,我注意到我原来的答案不符合你的要求,因为你想要一个按行应用。相应地编辑了我的答案。关于换位,你是对的-我测试过了,开销很小。但是我不明白为什么要在编辑中转置原始数据集,t(as.data.frame(lappy(sample\u matrix,dummy\u func2))对我来说是正确的。。。。它确实管用,但仍然不是超级可爱。除非有新的证据,否则我将接受你的回答。
dummy_func2 <- function(x) c(1)
data.frame(t(apply(sample_matrix, 1, dummy_func2))
X1 X2 X3 X4 X5
1 1 1 1 1 1
res <- data.frame(apply(sample_matrix, 1, dummy_func2))
if(ncol(res) > 1) res <- t(res)
sample_matrix<-t(sample_matrix)
dummy_func1 <- function(x) c(1, 2)
a <- lapply(as.data.frame(sample_matrix) , dummy_func1)
t(data.frame(a))
[,1] [,2]
v1 1 2
v2 1 2
v3 1 2
dummy_func2 <- function(x) c(1)
b<- lapply(as.data.frame(sample_matrix), dummy_func2)
t(data.frame(b))
[,1]
v1 1
v2 1
v3 1