R 如何分割数据帧?
我想把一个数据帧分割成几个较小的数据帧。这看起来是一个非常简单的问题,但是我无法从web搜索中找到解决方案。如果您想根据某个变量的值拆分数据帧,我建议使用R 如何分割数据帧?,r,split,dataframe,r-faq,R,Split,Dataframe,R Faq,我想把一个数据帧分割成几个较小的数据帧。这看起来是一个非常简单的问题,但是我无法从web搜索中找到解决方案。如果您想根据某个变量的值拆分数据帧,我建议使用plyr包中的daply() library(plyr) x <- daply(df, .(splitting_variable), function(x)return(x)) 在将数据拆分为许多数据帧之前,我确信没有其他更聪明的方法来处理数据。subset()也很有用: subset(DATAFRAME, COLUMNNAME ==
plyr
包中的daply()
library(plyr)
x <- daply(df, .(splitting_variable), function(x)return(x))
在将数据拆分为许多数据帧之前,我确信没有其他更聪明的方法来处理数据。subset()
也很有用:
subset(DATAFRAME, COLUMNNAME == "")
对于调查包,可能与调查
包相关
您可能还希望将数据帧剪切成任意数量的较小数据帧。在这里,我们将其分为两个数据帧
x = data.frame(num = 1:26, let = letters, LET = LETTERS)
set.seed(10)
split(x, sample(rep(1:2, 13)))
给予
还可以基于现有列拆分数据帧。例如,要基于mtcars
中的cyl
列创建三个数据帧:
split(mtcars,mtcars$cyl)
您想要的答案在很大程度上取决于您想要如何以及为什么要分解数据帧 例如,如果希望省略一些变量,可以从数据库的特定列创建新的数据帧。数据框后括号中的下标表示行数和列数。查看Spoory以获得完整的描述
newdf <- mydf[,1:3]
newdf我刚刚发布了一种RFC,可能会帮助您:
x=data.frame(num=1:26,let=lets,let=lets)
##块数
n您也可以使用
data2 <- data[data$sum_points == 2500, ]
data2 data2 data2
翼型和点场点初始轮廓场
108 5 2500 625 0.000082 0.004329 0.733109
106 5 2500 625 0.000102 0.004564 0.733243
117 5 2500 625 0.000087 0.004321 0.733274
112 5 2500 625 0.000081 0.004428 0.733587
如果要按其中一列中的值进行拆分,可以使用lappy
。例如,要将ChickWeight
拆分为每个鸡的单独数据集:
data(ChickWeight)
lapply(unique(ChickWeight$Chick), function(x) ChickWeight[ChickWeight$Chick == x,])
拆分数据帧似乎适得其反。相反,使用split-apply-combine范例,例如,生成一些数据
df = data.frame(grp=sample(letters, 100, TRUE), x=rnorm(100))
然后仅拆分相关列,并将scale()
函数应用于每组中的x,并合并结果(使用split请预先说明非基函数来自的包-大概你是指来自包plyr的daply?我在代码段中加载了plyr,因此我认为它很清楚,但为了清晰起见,我将编辑答案。我建议先使用dlply
,但它不会通过分组变量自动命名条目。我不知道我首先做了什么,但除非指定了函数,否则aparentlydaply
不起作用。我编辑了答案以使其起作用。嘿,greg,我不理解示例命令的语法,你能解释一下吗。“你可能还想将数据帧剪切成任意数量的较小数据帧。这里,我们将其剪切成两个数据帧。”如果您在此处指定两个数据帧,这是任意数量的数据帧吗?@user5359531,此处任意两个数据帧。从未理解split()
,但使用组索引(“四分位”)并随后按组索引(“四分位”)进行筛选实现了我的目的:group=df[df$quartile==I,]
。您好,如果您想根据该列中的唯一值将其动态拆分为不同的数据帧,您会怎么做。?
x = data.frame(num = 1:26, let = letters, LET = LETTERS)
## number of chunks
n <- 2
dfchunk <- split(x, factor(sort(rank(row.names(x))%%n)))
dfchunk
$`0`
num let LET
1 1 a A
2 2 b B
3 3 c C
4 4 d D
5 5 e E
6 6 f F
7 7 g G
8 8 h H
9 9 i I
10 10 j J
11 11 k K
12 12 l L
13 13 m M
$`1`
num let LET
14 14 n N
15 15 o O
16 16 p P
17 17 q Q
18 18 r R
19 19 s S
20 20 t T
21 21 u U
22 22 v V
23 23 w W
24 24 x X
25 25 y Y
26 26 z Z
data2 <- data[data$sum_points == 2500, ]
airfoils sum_points field_points init_t contour_t field_t
...
491 5 2500 5625 0.000086 0.004272 6.321774
498 5 2500 5625 0.000087 0.004507 6.325083
504 5 2500 5625 0.000088 0.004370 6.336034
603 5 250 10000 0.000072 0.000525 1.111278
577 5 250 10000 0.000104 0.000559 1.111431
587 5 250 10000 0.000072 0.000528 1.111524
606 5 250 10000 0.000079 0.000538 1.111685
....
> data2 <- data[data$sum_points == 2500, ]
> data2
airfoils sum_points field_points init_t contour_t field_t
108 5 2500 625 0.000082 0.004329 0.733109
106 5 2500 625 0.000102 0.004564 0.733243
117 5 2500 625 0.000087 0.004321 0.733274
112 5 2500 625 0.000081 0.004428 0.733587
data(ChickWeight)
lapply(unique(ChickWeight$Chick), function(x) ChickWeight[ChickWeight$Chick == x,])
df = data.frame(grp=sample(letters, 100, TRUE), x=rnorm(100))
df$z = 0
split(df$z, df$grp) = lapply(split(df$x, df$grp), scale)
## alternative: df$z = ave(df$x, df$grp, FUN=scale)
library(dplyr)
df %>% group_by(grp) %>% mutate(z=scale(x))