我是R的新手,并且在语法上花费了很多时间。假设我有以下数据框数据:
value label second
1 a q
2 a q
3 a ASDF
4 b q
6 b QWERTY
6 b QWERTY
7 c q
8 c q
9 c q
10 d q
现在,我想获得一个向量,df$second
该向量对应于df$value
给定值的最大值df$label
。因此,举例来说df$label = 'a'
,我想返回'ASDF'
。对于df$label = 'b'
,我想回来'QWERTY', 'QWERTY'
。
这是我正在尝试的:
max_value <- max(data$value[data$label == 'a'])
result <- c()
for (x in data$value){
if (x == max_value){
result <- c(result, data$second)
}
}
现在,这不会生成正确的结果向量。我想找出一种方法来使用sapply,tapply,mapply等。我只是很难理解这些功能。任何帮助将不胜感激。
lapply( split(dat, dat$label),
function(df) df[df$value == max(df$value), "second"] )
$a
[1] ASDF
Levels: ASDF q QWERTY
$b
[1] QWERTY QWERTY
Levels: ASDF q QWERTY
$c
[1] q
Levels: ASDF q QWERTY
$d
[1] q
Levels: ASDF q QWERTY
如果您想摆脱因素负担:
lapply( split(dat, dat$label),
function(df) as.character(df[df$value == max(df$value), "second"]) )
$a
[1] "ASDF"
$b
[1] "QWERTY" "QWERTY"
$c
[1] "q"
$d
[1] "q"
要提取特定的叶子,请将结果设置为一个值,并使用“ [[”提取:
val <- lapply( split(dat, dat$label),
function(df) as.character(df[df$value == max(df$value), "second"]) )
val[["a"]]
#[1] "ASDF"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句