当前位置: 首页 > 知识库问答 >
问题:

基于行中的NAs选择数据帧中的列

巫马望
2023-03-14

假设我有一个7列的数据帧,有些行有7个值,有些行的NAs超过了某个点。我想抓住最后一个值(从左到右),不是NA,然后直接向左的值。它是分层数据,但有些组比其他组更深。我想要最深和第二深的组在一个新的数据帧的两列。

这段代码可以工作,但对于46K观测值的数据帧,我的内存已达到最大。有没有比这更有效的方法?

df <- data.frame(LEVEL1 = c('animal', 'vegetable', 'mineral'),
                 LEVEL2 = c('mammal', 'pepper', 'rock'),
                 LEVEL3 = c('dog', 'jalepeno', NA),
                 LEVEL4 = c('westie', NA, NA))

deepest <- apply(df, 1, 
                  function(x) length(which(!is.na(x))))
one.up <- apply(df, 1, 
                    function(x) length(which(!is.na(x)))-1)
len <- nrow(df)
output <- data.frame(one.up = unlist(sapply(1:len, 
                            function(x) df[x, one.up[x]])),
                     deepest= unlist(sapply(1:len, 
                                            function(x) df[x, deepest[x]])))

第一次发帖。通常我可以拼凑我需要从这个网站。提前感谢。

共有2个答案

全飞扬
2023-03-14

如果NAs可能分布在各行的长度上,我不确定您的代码是否会提供您认为应该提供的内容(尽管您说这不应该发生)此代码将在第一个NA之前停止,并返回前两个值。

> output.m <- apply(df,1,function(x) { leng.na <-rle(is.na(x))$lengths[1]
                                       tail(x[1:leng.na],2) }  )
> output.d <- as.data.frame(t(output.m))
> output.d
       V1       V2
1     dog   westie
2  pepper jalepeno
3 mineral     rock
麻学博
2023-03-14

我认为你可以通过一个简单的应用调用来节省运行两次循环,比如:

> apply(df, 1, function(x) {
+     n <- max(which(!is.na(x)))
+     x[(n-1):n]
+ })
     [,1]     [,2]       [,3]     
[1,] "dog"    "pepper"   "mineral"
[2,] "westie" "jalepeno" "rock"   
 类似资料:
  • 目标:基于另一个数据帧中的“键”更改一个数据帧中的NAs列(类似于VLookUp,但仅在R中除外) 这里给定df1(为了简单起见,我只有6行。我拥有的键是50个状态的50行): 这里给出了df2(这只是一个示例。我正在处理的真实数据帧有更多的行): 任务:创建一个R函数,该函数循环并读取每个df2$Article行中的状态;然后将其与df1$State\u Name交叉引用,根据df2$Artic

  • 我想根据某个列变量的不同值从数据框中选择行,并制作直方图。 输出:空数据框列:[年龄、工人阶级、fnlwgt、教育程度、受教育人数、婚姻状况、职业、关系、种族、性别、capitalgain、CapitalAlloss、每周小时数、国家、收入水平]索引:[] 从上面的几行可以看出,我试图选择收入水平为'

  • 我有以下数据帧: 我需要删除等于的行。最有效的方法是什么?

  • 我有一个数据集,我想根据该行的2或列值从数据框中删除行。例如-我有关于美国所有电视节目的数据帧,我需要根据电视节目的季节和剧集删除电视节目的特定行。就像我需要删除高谭市电视台的行,但只删除包含第四季和第十集的行。 如果我能在这方面得到帮助,我将不胜感激。

  • 这不是一个重复的问题,但类似于 根据pandas中列中的值从数据帧中选择行

  • 如何根据Pandas中某个列中的值从中选择行? 在SQL中,我将使用: 我试图查看熊猫的文档,但我没有立即找到答案。