将某些行中的列折叠为R中列数最少的行

汤姆

我想知道如何折叠具有不带NA的列数最少的行的数据帧中的列。有些行只有3列,其余的则用NA填充。其他行的所有列均填充有数字,而没有NA。我在下面提供了一个样本数据集,并希望将其作为理想的结果。

在下面的理想数据框中,中间列始终变为列2。例如,具有5列的行将列1和2折叠为1,将列4和5折叠为3。

a <- c(1, 1, 1, 1, 1, 1)
b <- c(2, 2, 2, 2, 2, 2)
c <- c(3, 3, 3, 3, 3, 3)
d <- c(NA, 4, NA, 4, 4, NA)
e <- c(NA, 5, NA, 5, 5, NA)
f <- c(NA, NA, NA, 6, 6, NA)
g <- c(NA, NA, NA, 7, 7, NA)

df <- data.frame(a, b, c, d, e, f, g)

ideal data.drame
ai <- c(1, 3, 1, 1, 5, 1)
bi <- c(2, 3, 2, 2, 4, 2)
ci <- c(3, 9, 3, 3, 18, 3)
di <- c(NA, NA, NA, NA, NA, NA)
ei <- c(NA, NA, NA, NA, NA, NA)
fi <- c(NA, NA, NA, NA, NA, NA)
gi <- c(NA, NA, NA, NA, NA, NA)

dfi <- data.frame(ai, bi, ci, di, ei, fi, gi)

原因是我需要清理有关政治和人口统计的数据集以进行分析。每行代表民意调查受访者,从保守到自由。有些民意调查只有3个类别的自由主义/保守派,有些则有5或7个类别。对我而言,唯一有意义的方法是将每一行折叠为具有最少列数的行(在我的示例数据帧中为3)。实际的数据集有成千上万的行,因此我需要一种自动化的方式来完成它。

数据框未按任何特定顺序排序。我曾考虑过将列切成百分位数,但这会错误地解释具有7列的行,因为只有中间列(4)应该是第2行。

请让我知道我是否可以使问题更容易回答,并感谢您的帮助。

zw324

这很笨拙,但可能会起作用:

> apply(df, 1, function(x) {y <- na.omit(x); m <- length(y) %/% 2; c(sum(y[1:m]), y[m + 1], sum(y[(m + 2):length(y)]))})
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    3    1    6    6    1
[2,]    2    3    2    4    4    2
[3,]    3    9    3   18   18    3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将XML折叠为Visual Studio Code中的元素

R将多行折叠为1行-同一列

R使用特定的日期和字符列功能将多行折叠为1行

r将多列中的数据折叠为一

R:将多个布尔列折叠为单个属性列,并为每个组合添加新行

R使用每列的特定功能将多行折叠为1行

以响应方式将2列布局折叠为单列

R:将data.frame中的值折叠为类似于paste(collapse =',')的向量

将pandas数据框中的每个组的多列折叠为一组的python方法是什么?

将集合的数组折叠为Julia中的单个集合

如何制作可以将其行折叠为Qt中类别的表?

将行折叠为列熊猫

SQL / Postgres-根据组中的行位置将每N行折叠为1

R通过将多列分组将多行折叠为一行

折叠Pandas Python中列中的某些行

将数据框中的行折叠为一个特定行以填充缺失值?

熊猫将以字符开头的多列折叠为行/列

将每列中的所有单元格折叠为一个单元格,并忽略NA

将分散在多个变量中的信息折叠为R中的1

如何将字符串数据折叠为r中多列的一行?

将数据帧中的每四行系列折叠为一个向量,覆盖缺失值

将数据框折叠为单行并根据R行创建新列

将多列值折叠为1个因子

将 4 个引导列折叠为 2 个

将列折叠为新变量

R:根据二进制“是/否”将“宽”数据折叠为单个串联列

如何将唯一的重复列折叠为 R 中的唯一列?

在 R 中整理:如何基于向量将我的二进制列折叠为字符?

将列转置为 R 数据框中的行