如何从数据框中的一行中获取某个值? [R]
How can I get a certain value from a row in dataframe? [R]
我正在用 class 树和“rpart”库进行预测,当我进行“预测”时,我得到一个 table 概率及其 value/category那个测试数据可以拿,我想从最大的概率中得到value/category。例如(一旦预测完成),table 我得到的是:
Table1
我想要这个 table:
Tale2
在此先感谢,我已经尝试了一些东西,但由于我是 R 的新手,所以没有取得太大成就,干杯!
你没有 post 你的数据,所以我只是把它放在一个 .csv 中,然后从我的 C: 驱动器上的 R 文件夹访问它。
这可能是一种更简单的方法,但这是我在可能有多个不同类型(按列或行)要排序时使用的方法。如果您是 R 的新手并且尚未安装 data.table 或 dplyr,则需要在控制台中输入第二部分。
我保留了这些值,但如果您不需要它们,可以用最后一行修复。
setwd("C:/R")
library(data.table)
library(dplyr)
Table <- read.csv("Table1.csv", check.names = FALSE, fileEncoding = 'UTF-8-BOM')
#Making the data long form makes it much easier to sort as your data gets more complex.
LongForm <- melt(setDT(Table), id.vars = c("index"), variable.name = "Category")
Table1 <- as.data.table(LongForm)
#This gets you what you want.
highest <- Table1 %>% group_by(index) %>% top_n(1, value)
#Then just sort it how you wanted it to look
Table2 <- highest[order(highest$index, decreasing = FALSE), ]
View(Table2)
如果您没有合适的软件包
install.packages("data.table")
和
install.packages("dplyr")
去掉数字
Table3 <- Table2[,1:2]
实现所需输出的一种方法可能是:
- 确定向量中的值
pattern
- 跨相关列进行变异并使用
str_detect
检查值是否在此列中 -> 如果为真,请使用 cur_column()
放置
新列中的列名。
用 .names
和 unite
做一些技巧和
终于 select.
library(dplyr)
library(tidyr)
library(stringr)
pattern <- c("0.85|0.5|0.6|0.8")
df %>%
mutate(across(starts_with("cat"), ~case_when(str_detect(., pattern) ~ cur_column()), .names = 'new_{col}')) %>%
unite(New_Col, starts_with('new'), na.rm = TRUE, sep = ' ') %>%
select(index, pred_category = New_Col)
index pred_category
<dbl> <chr>
1 1 cat2
2 2 cat1
3 3 cat3
4 4 cat3
我正在用 class 树和“rpart”库进行预测,当我进行“预测”时,我得到一个 table 概率及其 value/category那个测试数据可以拿,我想从最大的概率中得到value/category。例如(一旦预测完成),table 我得到的是:
Table1
我想要这个 table:
Tale2
在此先感谢,我已经尝试了一些东西,但由于我是 R 的新手,所以没有取得太大成就,干杯!
你没有 post 你的数据,所以我只是把它放在一个 .csv 中,然后从我的 C: 驱动器上的 R 文件夹访问它。
这可能是一种更简单的方法,但这是我在可能有多个不同类型(按列或行)要排序时使用的方法。如果您是 R 的新手并且尚未安装 data.table 或 dplyr,则需要在控制台中输入第二部分。
我保留了这些值,但如果您不需要它们,可以用最后一行修复。
setwd("C:/R")
library(data.table)
library(dplyr)
Table <- read.csv("Table1.csv", check.names = FALSE, fileEncoding = 'UTF-8-BOM')
#Making the data long form makes it much easier to sort as your data gets more complex.
LongForm <- melt(setDT(Table), id.vars = c("index"), variable.name = "Category")
Table1 <- as.data.table(LongForm)
#This gets you what you want.
highest <- Table1 %>% group_by(index) %>% top_n(1, value)
#Then just sort it how you wanted it to look
Table2 <- highest[order(highest$index, decreasing = FALSE), ]
View(Table2)
如果您没有合适的软件包
install.packages("data.table")
和
install.packages("dplyr")
去掉数字
Table3 <- Table2[,1:2]
实现所需输出的一种方法可能是:
- 确定向量中的值
pattern
- 跨相关列进行变异并使用
str_detect
检查值是否在此列中 -> 如果为真,请使用cur_column()
放置 新列中的列名。 用.names
和unite
做一些技巧和 终于 select.
library(dplyr)
library(tidyr)
library(stringr)
pattern <- c("0.85|0.5|0.6|0.8")
df %>%
mutate(across(starts_with("cat"), ~case_when(str_detect(., pattern) ~ cur_column()), .names = 'new_{col}')) %>%
unite(New_Col, starts_with('new'), na.rm = TRUE, sep = ' ') %>%
select(index, pred_category = New_Col)
index pred_category
<dbl> <chr>
1 1 cat2
2 2 cat1
3 3 cat3
4 4 cat3