我有以下数据框:
X1 X2 X3 X4 X5 X6 X7
p1 H I K J K H
p2 H K J K I J
p3 J K H I J K
p4 K I H J I J
我想用列X1
创建一个新的数据帧,并从X2
开始连接每两列,因此最终表如下所示:
X1 X2 X3 X4
p1 HI KJ KH
p2 HK JK IJ
p3 JK HI JK
p4 KI HJ IJ
而tidyr的unite对小数据集很好:
library(tidyr)
df |>
unite("X2", X2:X3, sep = "") |>
unite("X4", X4:X5, sep = "") |>
unite("X6", X6:X7, sep = "")
...我们可能想探索另一种通用方法。其中之一是旋转到更长的格式,将所有奇数列更改为前面的偶数(使用模运算符),然后旋转更长的时间,使用paste0折叠字符串。
library(tidyr)
library(dplyr)
df |>
pivot_longer(-X1,
names_prefix = "X",
names_transform = as.numeric) |>
mutate(name = if_else(name %% 2 == 1, name - 1, name)) |>
pivot_wider(names_from = name,
names_prefix = "X",
values_fn = ~ paste0(., collapse = ""))
输出:
# A tibble: 4 × 4
X1 X2 X4 X6
<chr> <chr> <chr> <chr>
1 p1 HI KJ KH
2 p2 HK JK IJ
3 p3 JK HI JK
4 p4 KI HJ IJ
数据:
library(readr)
df <- read_table("X1 X2 X3 X4 X5 X6 X7
p1 H I K J K H
p2 H K J K I J
p3 J K H I J K
p4 K I H J I J")
更新:
如果我们想从X3开始,你需要在两个地方更改代码。首先,不旋转两列(-c(X1,X2)
),然后从偶数列中减去1(name%%2==0)。例如。
library(tidyr)
library(dplyr)
df |>
pivot_longer(-c(X1, X2),
names_prefix = "X",
names_transform = as.numeric) |>
mutate(name = if_else(name %% 2 == 0, name - 1, name)) |>
pivot_wider(names_from = name,
names_prefix = "X",
values_fn = ~ paste0(., collapse = ""))
输出:
# A tibble: 4 × 5
X1 X2 X3 X5 X7
<chr> <chr> <chr> <chr> <chr>
1 p1 H IK JK H
2 p2 H KJ KI J
3 p3 J KH IJ K
4 p4 K IH JI J
(这里当然没有X8可供组合。)
基本R路
df=structure(list(X1 = c("p1", "p2", "p3", "p4"), X2 = c("H", "H",
"J", "K"), X3 = c("I", "K", "K", "I"), X4 = c("K", "J", "H",
"H"), X5 = c("J", "K", "I", "J"), X6 = c("K", "I", "J", "I"),
X7 = c("H", "J", "K", "J")), class = "data.frame", row.names = c(NA,
-4L))
df1=data.frame(t(df))
df1$G=c(0,rep(1:((nrow(df1)-1)/2),each=2))
data.frame(
t(
aggregate(
.~G,
data=df1,
paste0,
collapse=""
)[,-1]
)
)
导致
X1 X2 X3 X4
X1 p1 HI KJ KH
X2 p2 HK JK IJ
X3 p3 JK HI JK
X4 p4 KI HJ IJ
使用mapply:
cbind(df[ 1 ],
mapply(paste0, df[, seq(2, 7, 2)], df[, seq(3, 7, 2)]))
# X1 X2 X4 X6
# 1 p1 HI KJ KH
# 2 p2 HK JK IJ
# 3 p3 JK HI JK
# 4 p4 KI HJ IJ
假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出:
你能帮我连接两个数据帧吗。 我有两个数据帧。 DF1: DF2: 我需要基于前两个数据帧创建一个数据帧,左连接两列。列index和val2在两个数据帧中具有相同的名称。df3的结果应该如下所示: 应该删除df1中不存在的df2中的索引,如果df1中的索引具有与df2中相同的val2,则应该将1添加到新的列val3中,否则:NaN。 非常感谢提前!
我有两个数据帧需要以我正在努力的特定方式连接。 数据帧 1: 数据框2: 期望结果: 基本上-它应该在上连接df1和df2,但是如果df2中不存在,那么生成的应该是df1中的。 我尝试了 ),但这显然在列中留下了 以供 ,因为它在 df2 中没有匹配的域。对于此特定情况,我如何将它们添加到列中?
我正在尝试将两个PySpark数据帧与仅位于其中一个上的列连接起来: 现在我想生成第三个数据帧。我想要像熊猫这样的东西: 这可能吗?
我需要将两个数据帧和一个接一个地连接起来,它们具有相同的行数(),而不考虑任何键。此函数类似于
df1有每月时间索引,df2有季度时间索引。df1和df2有不同的行数和列数,我想:(1)并排连接它们并保持它们的索引。(2)输出到excel文件。 我尝试过pd.concat,但是这种方法连接基于我不想要的数据帧索引之一的数据帧 excel中的预期结果: