Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何轻松操作列表中的data.frame,让它们具有相同的模式?_R_Dataframe - Fatal编程技术网

如何轻松操作列表中的data.frame,让它们具有相同的模式?

如何轻松操作列表中的data.frame,让它们具有相同的模式?,r,dataframe,R,Dataframe,我实现了返回data.frame列表的函数,其中data.frame中索引向量的顺序不同。但是,我打算操纵这个列表,让第二个、第三个data.frame与列表中的第一个data.frame具有相同的模式。因为结果在列表中,所以我想轻松地操纵这个列表,让data.frame对象具有相同的模式。我怎样才能轻松做到这一点?有人知道任何容易操纵列表的有用技巧吗?提前谢谢 自定义函数的输出为: dfList <- list( df_1 = data.frame(hola = c(1,2,3),

我实现了返回data.frame列表的函数,其中data.frame中索引向量的顺序不同。但是,我打算操纵这个列表,让第二个、第三个data.frame与列表中的第一个data.frame具有相同的模式。因为结果在列表中,所以我想轻松地操纵这个列表,让data.frame对象具有相同的模式。我怎样才能轻松做到这一点?有人知道任何容易操纵列表的有用技巧吗?提前谢谢

自定义函数的输出为:

dfList <- list(
  df_1 = data.frame(hola = c(1,2,3), ciao=c(NA,1,2), bonjour=c(1,1,2)),
  df_2 = data.frame(ciao = c(1,2,3), hola=c(2,3,NA), bonjour=c(1,2,4)),
  df_3 = data.frame(bonjour = c(1,2,3,4), hola=c(2,3,NA,NA), ciao=c(1,2,NA,3))
)

我知道如果data.frame不在列表中会更容易,所以只需使用names()让它们具有相同的模式。但现在重点是列表中的data.frame作为输出,所以我打算很好地处理这个列表,而不是三次访问每个data.frame并使用names()函数。我怎样才能做到这一点?我怎样才能达到我想要的输出?我怎样才能在这个问题上得到更动态的解决方案?非常感谢:)

只需按照与第一个数据帧相同的顺序重新选择所有数据帧的列:

lapply(dfList, `[`, names(dfList[[1]]))

#$df_1
#  hola ciao bonjour
#1    1   NA       1
#2    2    1       1
#3    3    2       2

#$df_2
#  hola ciao bonjour
#1    2    1       1
#2    3    2       2
#3   NA    3       4

#$df_3
#  hola ciao bonjour
#1    2    1       1
#2    3    2       2
#3   NA   NA       3
#4   NA    3       4

只需按照与第一个数据帧相同的顺序重新选择所有数据帧的列:

lapply(dfList, `[`, names(dfList[[1]]))

#$df_1
#  hola ciao bonjour
#1    1   NA       1
#2    2    1       1
#3    3    2       2

#$df_2
#  hola ciao bonjour
#1    2    1       1
#2    3    2       2
#3   NA    3       4

#$df_3
#  hola ciao bonjour
#1    2    1       1
#2    3    2       2
#3   NA   NA       3
#4   NA    3       4
我们可以使用

lapply(dfList, function(x) x[names(dfList[[1]])])
我们可以使用

lapply(dfList, function(x) x[names(dfList[[1]])])

在我继续您的解决方案之后,我还打算这样做:rbind(dfList[[1L]]、unique(rbind(dfList[[2L]]、dfList[[3L]]),我如何使这一切变得更漂亮?如何使用动态解决方案?您想用
dfList[[2]
dfList[[3]]
中的唯一行绑定
dfList[[1]]
?我想我会这么做。或者可能是
rbind(dfList[[1]],unique(do.call(rbind,dfList[2:3]))
,但不是更漂亮。
rbind(dfList[[1]],unique(do.call(rbind,dfList[2:length(dfList]))
,索引不必硬编码,只要您的逻辑仍然有效,这种方法适用于任何长度的列表。Oops。我的括号不平衡。
rbind(dfList[[1]],unique(do.call(rbind,dfList[2:length(dfList)]))
在我继续您的解决方案后,我还打算这样做:rbind(dfList[[1L]],unique(rbind(dfList[[2L]],dfList[[3L]]),我怎样才能让它变得更漂亮呢?我怎样才能得到动态解决方案呢?你想用
dfList[[2]
dfList[[3]
中的唯一行绑定
dfList[[1]
?我想我会这么做。或者
rbind(dfList[[1]],unique(do.call>)(rbind,dfList[2:3])
,但并不漂亮。
rbind(dfList[[1]],unique(do.call(rbind,dfList[2:length(dfList])))
,索引不必硬编码,只要逻辑仍然有效,这种方法就可以用于任何长度的列表。哎呀,我的括号不平衡。
rbind(dfList[[1]],unique(do.call(rbind,dfList[2:长度(dfList)])