假设我有一个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]])))
第一次发帖。通常我可以拼凑我需要从这个网站。提前感谢。
如果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
我认为你可以通过一个简单的应用调用来节省运行两次循环,比如:
> 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中,我将使用: 我试图查看熊猫的文档,但我没有立即找到答案。