我想将数据框分成几个较小的数据框.这看起来像一个非常微不足道的问题,但我找不到网络搜索的解决方案.
我有一个由400'000行和大约50列组成的数据帧.由于这个数据框架太大,因此计算起来太费力了.我想将这个数据帧拆分成较小的数据帧,之后我将运行我想要运行的函数,然后在最后重新组装数据帧.
我没有用于分割此数据帧的分组变量.我只想按行数拆分它.例如,我想将这个400'000行的表分成400个1'000行的数据帧.我怎么能这样做?
我有同样的问题在这里,我除了要指定另一个向量变量分裂长度.所以,像这样:
example.data<-paste("ex",1:10,sep="")
example.data
[1] "ex1" "ex2" "ex3" "ex4" "ex5" "ex6" "ex7" "ex8" "ex9" "ex10"
split.lens <- c(4,2,1,3)
Run Code Online (Sandbox Code Playgroud)
应该给我以下列表:
result.list
[[1]]
[1] "ex1" "ex2" "ex3" "ex4"
[[2]]
[1] "ex5" "ex6"
[[3]]
[1] "ex7"
[[4]]
[1] "ex8" "ex9" "ex10"
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这样做的最好方法split.有任何想法吗?
谢谢!
我试图将连续变量离散化,将其分为三个等级.我想对正连续变量(在这种情况下,收入)的日志做同样的事情.
require(dplyr)
set.seed(3)
mydata = data.frame(realinc = rexp(10000))
summary(mydata)
new = mydata %>%
select(realinc) %>%
mutate(logrealinc = log(realinc),
realincTercile = cut(realinc, 3),
logrealincTercile = cut(logrealinc, 3),
realincTercileNum = as.numeric(realincTercile),
logrealincTercileNum = as.numeric(logrealincTercile))
new[sample(1:nrow(new), 10),]
Run Code Online (Sandbox Code Playgroud)
我原以为使用cut()会对每个变量(收入和对数收入)的离散因子产生相同的水平,因为log是单调函数.所以这里右边的两列应该是相等的,但这似乎不会发生.这是怎么回事?
> new[sample(1:nrow(new), 10),]
realinc logrealinc realincTercile logrealincTercile realincTercileNum logrealincTercileNum
7931 0.2967813 -1.21475972 (-0.00805,2.83] (-4.43,-1.15] 1 2
9036 0.9511824 -0.05004944 (-0.00805,2.83] (-1.15,2.15] 1 3
8204 4.5365676 1.51217069 (2.83,5.66] (-1.15,2.15] 2 3
3136 2.0610693 0.72322490 (-0.00805,2.83] (-1.15,2.15] 1 3
9708 0.9655805 -0.03502581 (-0.00805,2.83] (-1.15,2.15] 1 …Run Code Online (Sandbox Code Playgroud) 我的问题与这个问题密切相关:
我试图将一个大向量分成已知的块大小,但速度很慢。具有偶数余数的向量的解决方案在这里:
存在因素时的快速解决方案如下:
我想处理没有(大)因素存在的情况,因为我想要相当大的块。
我的矢量示例比我现实生活中的矢量小得多:
d <- 1:6510321
# Sloooow
chunks <- split(d, ceiling(seq_along(d)/2000))
Run Code Online (Sandbox Code Playgroud) 我有一个非常宽的表格(300 多列),并且想通过换行来显示它。在示例中,我将仅使用 100 列。
我的想法是重复使用 kable 来显示表的子集:
library(kableExtra)
set.seed(1)
data = data.frame(matrix(rnorm(300, 10, 1), ncol = 100))
kable(data[, 1:5], 'latex', booktabs = T)
kable(data[, 6:10], 'latex', booktabs = T)
kable(data[, 11:15], 'latex', booktabs = T)
Run Code Online (Sandbox Code Playgroud)
但这显然很乏味......我知道有缩小比例的选项,但由于我有这么多列,这是不可能的。
我可以在 kable 中添加任何参数来实现它吗?
更新:@jay.sf 的答案似乎运行良好,但这里没有产生相同的结果。相反,我得到了一些简单的代码 - 您能否再看一下并让我知道我可以在哪里改进?谢谢!
我的是sessionInfo():R version 3.5.1 (2018-07-02)与rmarkdown::pandoc_version().1.19.2.1
我有一个双循环,如下所示 的问题是R(2.15.2)使用越来越多的内存,我不明白为什么.
虽然我知道这必须在内循环中发生,因为rbind()我在那里做,我不明白为什么R在外循环的新循环开始时实际上重复使用对象('xmlCatcher')时继续抓取内存:
# !!!BEWARE this example creates a lot of files (n=1000)!!!!
require(XML)
chunk <- function(x, chunksize){
# source: http://stackoverflow.com/a/3321659/1144966
x2 <- seq_along(x)
split(x, ceiling(x2/chunksize))
}
chunky <- chunk(paste("test",1:1000,".xml",sep=""),100)
for(i in 1:1000){
writeLines(c(paste('<?xml version="1.0"?>\n <note>\n <to>Tove</to>\n <nr>',i,'</nr>\n <from>Jani</from>\n <heading>Reminder</heading>\n ',sep=""), paste(rep('<body>Do not forget me this weekend!</body>\n',sample(1:10, 1)),sep="" ) , ' </note>')
,paste("test",i,".xml",sep=""))
}
for(k in 1:length(chunky)){
gc()
print(chunky[[k]])
xmlCatcher <- NULL
for(i in 1:length(chunky[[k]])){
filename <- chunky[[k]][i]
xml <- xmlTreeParse(filename)
xml <- xmlRoot(xml)
result <- sapply(getNodeSet(xml,"//body"), …Run Code Online (Sandbox Code Playgroud) 我有一个数据框:
set.seed(123)
x <- sample(10)
y <- x^2
my.df <- data.frame(x, y)
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
> my.df
x y
1 3 9
2 8 64
3 4 16
4 7 49
5 6 36
6 1 1
7 10 100
8 9 81
9 2 4
10 5 25
Run Code Online (Sandbox Code Playgroud)
我想要的是每n行对行进行分组,以计算均值,总和或5个选定行上的任何值。对于n = 5这样的事情:
my.df %>% group_by(5) %>% summarise(sum = sum(y), mean = mean(y))
Run Code Online (Sandbox Code Playgroud)
预期的输出将类似于:
# A tibble: 1 x 2
sum mean
<dbl> <dbl>
1 174 34.8
2 211 …Run Code Online (Sandbox Code Playgroud) 我有矢量
x <- c("A", "B", "C", "D", "E", "F")
Run Code Online (Sandbox Code Playgroud)
我按以下方式分裂:
split(x, 1:2)
Run Code Online (Sandbox Code Playgroud)
它出现为(a,c,e)和(b,d,f),但我想要(a,b,c)和(d,e,f).有什么方法可以将它改为水平分割而不是垂直分割?
每个子列表的长度指定为LEN。所有子列表(可能除了最后一个子列表)都应该在原始列表中具有完全相同的 LEN 元素。
输入可以是列表(相同类型元素)或向量。输出类型应该对应。
例如:
给定c(1, 2, 3, 4, 5)和LEN = 2,该函数应返回c(c(1, 2), c(3, 4), c(5))。
给定list("", "hi", "world", "R is hard")和LEN = 2,该函数应返回list(list("", "hi"), list("world", "R is hard")。
我正在寻找一种 R 惯用的方法来做到这一点。在其他语言中,for 循环就足够了。
或者,由于我是 R 的新手,因此这个问题的设置一开始可能并不符合习惯。如果有请指出。但是输入固定为列表或向量。
谢谢!
我已从一台设备输出数据。不幸的是,输出数据的组织不是很好,我一直在用R编写代码来分解它。本质上,数据是粘贴到一个长文档中的每个主题的单独信息列表(基本描述信息,以及每个时间间隔的两个不同测量A和B的原始数据)。例如:
Date: 01/01/2016
Time: 12:00:00
Subject: Subject1
A:
1: 1 2 4 1
2: 2 1 2 3
3: 1 0 2 7
B:
1: 2 3 0 1
2: 4 1 1 2
3: 3 5 2 8
Date: 01/01/2016
Time: 12:00:00
Subject: Subject2
A:
1: 8 2 0 1
2: 9 1 2 7
3: 1 6 2 7
B:
1: 2 3 2 0
2: 6 7 1 2
3: 3 3 2 4
Run Code Online (Sandbox Code Playgroud)
我已经用R编写了一个有效的代码,但是使用split(seq_along),for循环和do.call效果很好(主要基于此堆栈溢出问题和 …