簡體   English   中英

如何更改 R data.frame 中的行名?

[英]How to change the row names in R data.frame?

我想將 DF 中的站重命名為DA056HappyAB786Sad

library(tidyverse)

DF1 <- data.frame(Station = rep("DA056",3), Level = 100:102) 
DF2 <- data.frame(Station = rep("AB786",3), Level = 201:203) 
DF <- bind_rows(DF1,DF2)

我們可以使用帶有為相應levels指定的labelsfactor

library(dplyr)
DF <- DF %>%
    mutate(Station = factor(Station, levels = c("DA056", "AB786"), 
              labels = c("Happy", "Sad")))

DF$Station
#[1] Happy Happy Happy Sad   Sad   Sad  
#Levels: Happy Sad

recode

DF %>%
     mutate(Station = recode(Station, DA056 = 'Happy', AB786 = 'Sad'))
#  Station Level
#1   Happy   100
#2   Happy   101
#3   Happy   102
#4     Sad   201
#5     Sad   202
#6     Sad   203

如果要更改的值很多,更好的選擇是在創建 key/val 數據集后進行連接

keyval <- data.frame(Station = c("DA056", "AB786"),
    val = c("Happy", "Sad"), stringsAsFactors = FALSE)
DF %>%
     left_join(keyval) %>%
     mutate(Station = coalesce(val, Station))

或與base R

DF$Station <- with(df,  factor(Station, levels = c("DA056", "AB786"), 
              labels = c("Happy", "Sad")))

一個選項是使用dplyr::case_when

library(dplyr)
DF1 <- data.frame(Station = rep("DA056",3), Level = 100:102, stringsAsFactors = F) 
DF2 <- data.frame(Station = rep("AB786",3), Level = 201:203, stringsAsFactors = F) 
DF <- bind_rows(DF1,DF2)

DF <- DF %>% mutate(Station = case_when( Station == "DA056" ~ "Happy",
                                         Station == "AB786" ~ "Sad",
                                         TRUE ~ Station))

Output

> DF
  Station Level
1   Happy   100
2   Happy   101
3   Happy   102
4     Sad   201
5     Sad   202
6     Sad   203

您可以使用case_when:

DF %>%
  mutate(Station = case_when(Station == "DA056"  ~ "Happy", Station =="AB786" ~ "Sad"))

另一個簡單的解決方案

DF$Station = ifelse(DF$Station == "DA056", "Happy", "Sad")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM