2016-02-29 3 views
0

Предположим, что существует х со всеми числовыми значениямикак разделить dataframe в R

set.seed(0) 
system.time(x <- replicate(10000 ,rexp(rpois(1,1.2), rate=0.1))) 

, когда я получаю это в Excel с помощью

rinterface.GetArray "x", Range("a1") 

она идет в первенствовать колонке A.How можно расколоть x и получить значения в excel в разных столбцах, например, он должен храниться как

 Col A Col B Col C Col D 
    1 11  2  3  40 
    2 1  2  3 
    3 0 
    4 4 
+0

ли это строка? – akrun

+0

@akrun all numeric – HaagenDaz

+0

Я имел в виду '' ' – akrun

ответ

1

Не уверен, что я понял ваш вопрос.

df - это не кадр данных, а вектор. Вы должны использовать список, поскольку ваши векторы имеют неравный размер. Вы можете использовать следующий код, чтобы получить матрицу, как вы хотите внутри R, а также запись в CSV-файл, который может быть открыт в Excel (res.transposed имеет кадр данных, который вы хотите):

set.seed(0) 
system.time(x <- replicate(10000 ,rexp(rpois(1,1.2), rate=0.1))) 
max.size <- max(lengths(x)) 

res <- mapply(function(l, s){ 
    if(is.numeric(l) && length(l) == 0){ 
     c(0, rep(NA, max.size - 1)) 
    }else{ 
     c(l, rep(NA, max.size - length(l))) 
} 
}, x, max.size) 
res.transposed <- as.data.frame(res) 

write.csv(res.transposed, 
     file = "~/Desktop/filled_matrix.csv", 
     quote = FALSE, 
     na = "") 
+0

@HaagenDaz. Вы можете заменить значения «NA» на «0» внутри 'mapply', чтобы иметь точную матрицу, подобную той, которую вы хотите в пределах R. Из-за стиля и значения кодирования я предпочитаю« NA », так как у вас нет нулей в ваших векторах, но отсутствуют значения. – Joseah

+0

х генерируется с использованием 'set.seed (0) system.time ( х <- копировщика (10000, Rexp (rpois (1,1.2), скорость = 0,1)) )' так х содержит 10000 векторов. – HaagenDaz

+0

Код по-прежнему работает, так как у вас нет четырех векторов, как в вашем примере, вам просто нужно избавиться от имен (res.transposed) <- c ("Col A", "Col B", "Col C" , "Col D") 'или назовите свои столбцы по своему усмотрению. – Joseah

0

У вас есть две возможности: первая - это данные .frame, где заготовки являются NA

my.df <- data.frame("A"=c(11,1,0,4),"B"=c(2,2,NA,NA),"C"=c(3,3,NA,NA),"D"=c(40,NA,NA,NA)) 

Во-вторых, чтобы использовать список, который лучше при хранении неравные векторов.

my.list <- list("A"=c(11,1,0,4),"B"=c(2,2),"C"=c(3,3),"D"=40)