Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
在顶行中找到第n个最大值,并省略R中的其余列_R_Dataframe_Subset_Data Cleaning - Fatal编程技术网

在顶行中找到第n个最大值,并省略R中的其余列

在顶行中找到第n个最大值,并省略R中的其余列,r,dataframe,subset,data-cleaning,R,Dataframe,Subset,Data Cleaning,我正在尝试更改数据帧,以便只包含行的第一个值为第n个最大值的列 例如,这里假设我只想包括第1行的最大值为第二大(前2大)的列 这样就删除了a和d,因为0.1和NA不是 第一排。此处0.6和0.12分别大于a和d列中的0.1和NA b c 1 0.6 0.12 2 0.7 0.13 3 0.8 0.14 4 0.9 0.15 5 0.1 0.16 有没有简单的方法来子集?我不想订购它,因为这会给我拥有的其他相关数据帧带来问题 对data.frame的第一行进行排序,然后按名

我正在尝试更改数据帧,以便只包含行的第一个值为第n个最大值的列

例如,这里假设我只想包括第1行的最大值为第二大(前2大)的列

这样就删除了
a
d
,因为
0.1
NA
不是 第一排。此处
0.6
0.12
分别大于
a和
d列中的
0.1
NA

    b    c 
1 0.6 0.12 
2 0.7 0.13
3 0.8 0.14 
4 0.9 0.15 
5 0.1 0.16

有没有简单的方法来子集?我不想订购它,因为这会给我拥有的其他相关数据帧带来问题

data.frame的第一行进行排序,然后按名称进行子集排序:

cols <- names(sort(dat1[1,], na.last = NA, decreasing = TRUE))
> dat1[,cols[1:2]]
    b    c
1 0.6 0.12
2 0.7 0.13
3 0.8 0.14
4 0.9 0.15
5 0.1 0.16
cols-dat1[,cols[1:2]]
b c
1 0.6 0.12
2 0.7 0.13
3 0.8 0.14
4 0.9 0.15
5 0.1 0.16

补充pieca的答案,您可以将其封装到函数中。 同样,这样,返回的data.frame将不会被排序

get_nth <- function(df, n) {
  df[] <- lapply(df, as.numeric) # edit
  cols <- names(sort(df[1, ], na.last = NA, decreasing = TRUE))
  cols <- cols[seq(n)]
  df <- df[names(df) %in% cols]
  return(df)
}

获取第n列您可以获取第一行的倒排,并获取前n列:

> r <- rank(-dat1[1,], na.last=T)
> r <- r <= 2
> dat1[,r]
    b    c
1 0.6 0.12
2 0.7 0.13
3 0.8 0.14
4 0.9 0.15
5 0.1 0.16

>r我不太明白。您想“只包括列中的顶部值/第1行中的值为第二大的列”如何可以有多个列?不应该只有一列的第一个值在第一行中是第二大的吗?我有多个列,就像我在数据帧中有a,b,c,d向量一样。我现在已经编辑了这篇文章。我希望你能理解。有没有一种不排序的方法?此解决方案复制第一行并仅对其排序,
dat1
不受影响当我尝试将你的建议应用于我的真实数据集时,它不会得到第n个最大值。它跳过了一些列。请注意,我的数据帧不是按字母顺序排列的。我只是尝试了另一个结构类似的数据集,其中列没有按字母顺序排列,我没有得到第n个最大值。@Mataunited17“跳过”是什么意思?
cols
中列的顺序是否如您所期望的那样?您的所有列都是数值列吗?(运行
str(yourdata)
)列名是否按字母顺序排列在这里并不重要
> r <- rank(-dat1[1,], na.last=T)
> r <- r <= 2
> dat1[,r]
    b    c
1 0.6 0.12
2 0.7 0.13
3 0.8 0.14
4 0.9 0.15
5 0.1 0.16