我有一个数据框,其中包含四个国家和三个变量x,y,z。现在,我正在尝试创建一个函数,该函数返回已定义行的最大值和包含该行中最大值的列名。
x y z
Sweden 1.6534561 0.11523404 0.2261730
France -1.2274320 -0.24096054 1.5096028
England -1.4503096 0.07227427 1.6740867
Spain 0.1867416 1.25318913 -0.7350560
问题是我不知道如何使用row_name查找该行中的最大值。
my_function(row_name){
value=
column=
paste("Highest value is", value, "and it is in column", column)
}
例如
my_function("Sweden"
)应该返回“最大值是1.6534561,并且在x列中”
答案 0 :(得分:2)
一种tidyverse
方法:
library(dplyr)
df %>%
mutate(ID= row.names(.)) %>%
tidyr::gather(key,val,-ID) %>%
group_by(ID) %>%
filter(val==max(val))
# A tibble: 4 x 3
# Groups: ID [4]
ID key val
<chr> <chr> <dbl>
1 Sweden x 1.65
2 Spain y 1.25
3 France z 1.51
4 England z 1.67
要创建功能(请注意,这可能需要一些非标准评估),
max_finder <- function(df, target_id){
df %>%
mutate(ID= row.names(.)) %>%
tidyr::gather(key,val,-ID) %>%
group_by(ID) %>%
filter(val==max(val), ID ==target_id)
}
max_finder(df,"Sweden")
# A tibble: 1 x 3
# Groups: ID [1]
ID key val
<chr> <chr> <dbl>
1 Sweden x 1.65
数据:
df<- structure(list(x = c(1.6534561, -1.227432, -1.4503096, 0.1867416
), y = c(0.11523404, -0.24096054, 0.07227427, 1.25318913), z = c(0.226173,
1.5096028, 1.6740867, -0.735056)), class = "data.frame", row.names = c("Sweden",
"France", "England", "Spain"))
答案 1 :(得分:1)
我创建了一个简单的数据集,该数据集与您的数据集不同但非常相似。
数据
df <- structure(list(x = 1:4, y = c(4, 8, 1, 6), z = c(3, 4, 1, 5)), class = "data.frame", row.names = c("Sweden",
"France", "England", "Spain"))
该函数利用基本索引编制功能,并且需要您另外指定data.frame
,如果需要,可以删除此功能。
功能
my_function <- function(Row, df){
max <- max(df[Row, ])
row <- which(df[Row, ] == max)
paste("Highest value is", max, "and it is in column", names(df)[row])
}
> my_function("Sweden", df)
[1] "Highest value is 4 and it is in column y"
答案 2 :(得分:1)
my_function(row_name){
value=max(dataframe["row_name", ])
for(i in c(1:length(a["row_name",])) {
if(a["row_name",i] == value
column=names(dataframe)[i]
}
paste("Highest value is", value, "and it is in column", column)
}