r - 如何拆分数据框并将拆分的部分附加到新列中?

标签 r

我想通过更改第一列中的值来拆分数据框,然后将拆分部分附加到新列中。下面给出了一个例子。但是,我最终得到了一个无法处理回方便的数据框的列表。

所需的输出应类似于 df_goal,但尚未正确格式化。

#data

x <-c(1,2,3)
y <-c(20200101,20200101,20200101)
z <-c(4.5,5,7)
x_name <- "ID"
y_name <- "Date"
z_name <- "value"   

df <-data.frame(x,y,z)
names(df) <- c(x_name,y_name,z_name)

#processing

df$date <-format(as.Date(as.character(df$date), format="%Y%m%d"))
df01 <- split(df, f = df$ID)

#goal
a <-c(1)
b <-c(20200101)
c <-c(4.5)
d <-c(2)
e <-c(20200101)
f <-c(5)
g <-c(3)
h <-c(20200101)
i <-c(7)

df_goal <- data.frame(a,b,c,d,e,f,g,h,i)

最佳答案

您可以使用Reducecbinddata.frame 的每一行cbind 成一行,并且保持列的类型

Reduce(function(x,y) cbind(x, df[y,]), 2:nrow(df), df[1,])
#  ID     Date value ID     Date value ID     Date value
#1  1 20200101   4.5  2 20200101     5  3 20200101     7
#Equivalent for the sample dataset: cbind(cbind(df[1,], df[2,]), df[3,])

do.call with split:

do.call(cbind, split(df, 1:nrow(df)))
#  1.ID   1.Date 1.value 2.ID   2.Date 2.value 3.ID   3.Date 3.value
#1    1 20200101     4.5    2 20200101       5    3 20200101       7
#Equivalent for the sample dataset: cbind(df[1,], df[2,], df[3,])

如果您每个 ID 有几行,您可以尝试:

x <- split(df, df$ID)
y <- max(unlist(lapply(x, nrow)))
do.call(cbind, lapply(x, function(i) i[1:y,]))

关于r - 如何拆分数据框并将拆分的部分附加到新列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60300268/

相关文章:

运行文件夹中的每个文件

R:将列表中每个 < 1 的元素乘以 10,直到该元素 > 1

r - 更快地切片(原始)向量的方法?

r - 复杂的长到宽整形算法

读取 R 中不同目录中最后创建/修改的文件

r - 使用ggplot的ggmap函数将两张 map 相互叠加

r - 使用 for 循环的累积和方程

r - 在R中的变量中分离数据

r - ggpairs 图与相关值的热图,具有重要的星星和自定义主题

r - 在 R : Column. 标签中生成 HTML 表,或者在 stargazer 中的数据框表上生成 dep.var.caption