R 从多个选定列中创建新列(结果为min或NA)
我的数据有很多列和主题,但为了更简单地说明,让我们假设我有7个主题,有3个变量/列,分别称为x1、x2和x3(值范围为1到3和NAs)。在我想要的分析中,重要的是我实际调用了我想要使用的列(因为我不能在分析中只使用整个dataframe,因为那里有更多的变量/列)R 从多个选定列中创建新列(结果为min或NA),r,apply,min,sapply,inf,R,Apply,Min,Sapply,Inf,我的数据有很多列和主题,但为了更简单地说明,让我们假设我有7个主题,有3个变量/列,分别称为x1、x2和x3(值范围为1到3和NAs)。在我想要的分析中,重要的是我实际调用了我想要使用的列(因为我不能在分析中只使用整个dataframe,因为那里有更多的变量/列) >数据数据在调用min之前,您可以测试所有数据是否都是NA,如: apply(data[, c("x1","x2","x3")], 1, function(x) if(all(is.na(x))) NA else min(x, n
>数据数据在调用min
之前,您可以测试所有数据是否都是NA
,如:
apply(data[, c("x1","x2","x3")], 1, function(x)
if(all(is.na(x))) NA else min(x, na.rm=TRUE))
#[1] 1 2 1 NA 2 3 1
min(data[,c(“x1”,“x2”,“x3”)],1,na.rm=TRUE)
提供了1
和data[,c(“x1”,“x2”,“x3”)]中的最小值。
您正在寻找的pmin
函数返回输入值的(规则或并行)最小值。以下是使用pmin的两种方法:
df$minIget <- do.call(pmin, c(df[,-1], na.rm = TRUE)) # Approch1: using do.call
df %>% rowwise() %>% mutate(minIget = pmin(x1, x2,x3,na.rm = T))# Approch2: using tidyverse.
df$minIget%rowwise()%%>%变异(minIget=pmin(x1,x2,x3,na.rm=T))#方法2:使用tidyverse。
输出:
A tibble: 7 x 5
# Rowwise:
id x1 x2 x3 minIget
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 NA NA 1
2 2 2 3 2 2
3 3 2 1 NA 1
4 4 NA NA NA NA
5 5 3 2 3 2
6 6 3 3 NA 3
7 7 1 2 1 1
A tibble:7 x 5
#顺时针:
id x1 x2 x3迷你版
1 NA NA 1
2 2 2 3 2 2
3 3 2 1 NA 1
4不,不,不,不
5 5 3 2 3 2
6 6 3 NA 3
7 7 1 2 1 1
谢谢您的回答!我理解你对问题1的回答,谢谢!,但是对于问题2,我没有看到代码的改进版本?我想你用的是同样的?所以我认为我的代码所做的是查看整个列的最小值,但我也希望它查看每行的最小值。我很难在代码中更改它。顺便说一句,很抱歉我回复晚了点击这里可以得到一行的最小值。例如,对于第1行min(数据[1,c(“x1”,“x2”,“x3”)],na.rm=TRUE)
或对于第2行min(数据[2,c(“x1”,“x2”,“x3”)],na.rm=TRUE)
,谢谢您的回复!是的,这是可行的,但是代码是否可以自动对所有七行执行此操作,并创建所需的列x4?我尝试了min(数据[1:7,c(“x1”、“x2”、“x3”)],na.rm=TRUE)
,但它只给出了七行中一行的相同min值。因此,我的结果再次是全部1。在这种情况下,使用apply
检查每一行。感谢您的回答!关于方法1。我得到了错误的维数。我根据您的代码尝试了以下代码:df$minIget@RelcioR您错误地引用了列。变量的选择可以通过索引或列名来完成。在方法1中。根据我的答案,我使用索引通过了,df[,-1]表示除最后一列之外的所有列。在方法2中,我使用了列名。所以你必须运行它,因为它在我的回答中给出了它将运行正确谢谢你给我回复并帮助我理解它:)另外,关于引用的链接对我非常有用(我还是一个初学者)。谢谢没问题,这就是为什么,通过互相帮助来学习。此外,最好的做法是,如果其他SO成员已经回答了问题海报的问题,那么可以在所有解决方案中向上投票并选择一个答案。参考和。您可以向上投票多个答案,但选定的答案只能是一个,您将单击勾号。
df$minIget <- do.call(pmin, c(df[,-1], na.rm = TRUE)) # Approch1: using do.call
df %>% rowwise() %>% mutate(minIget = pmin(x1, x2,x3,na.rm = T))# Approch2: using tidyverse.
A tibble: 7 x 5
# Rowwise:
id x1 x2 x3 minIget
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 NA NA 1
2 2 2 3 2 2
3 3 2 1 NA 1
4 4 NA NA NA NA
5 5 3 2 3 2
6 6 3 3 NA 3
7 7 1 2 1 1