R 如何使用半一致格式重命名观测值?
我正在使用以下数据帧:R 如何使用半一致格式重命名观测值?,r,dataframe,R,Dataframe,我正在使用以下数据帧: Team Direction Side Joe HB-L L Eric HB-R R Tim FB-L R Mike HB L 我想删除“方向”栏中“L”或“R”前面的“HB”或“FB”。我还想消除“方向”列中没有“L”或“R”的观察结果。我希望它看起来像这样: Team Direction
Team Direction Side
Joe HB-L L
Eric HB-R R
Tim FB-L R
Mike HB L
我想删除“方向”栏中“L”或“R”前面的“HB”或“FB”。我还想消除“方向”列中没有“L”或“R”的观察结果。我希望它看起来像这样:
Team Direction Side
Joe L L
Eric R R
Tim L R
然后,我想添加一列,指示“方向”和“侧面”列是否相同。如果是,我希望它读“近”,如果不是,我希望它读“远”
我们可以使用
sub
在base R
中执行此操作,以在根据“方向”中存在的-
对行进行子设置后,移除子字符串,直到-
df1 <- subset(df1, grepl('-', Direction))
df1$Direction <- sub(".*-", "", df1$Direction)
然后,我们可以使用==
创建一个逻辑条件,将值替换为“远”、“近”
df1$Relation <- with(df1, c('FAR', 'NEAR')[(Direction == Side) + 1])
或使用
tidyverse
library(dplyr)
library(stringr)
df1 %>%
filter(grepl('-', Direction)) %>%
mutate(Direction = str_replace(Direction, '.*-', ''),
Relation = case_when(Direction == Side ~ 'NEAR', TRUE ~ 'FAR'))
# Team Direction Side Relation
#1 Joe L L NEAR
#2 Eric R R NEAR
#3 Tim L R FAR
或使用
data.table
library(data.table)
setDT(df1)[grepl('-', Direction)][, Direction := trimws(Direction,
whitespace = '.*-')][, Relation := fifelse(Direction == Side, 'NEAR', 'FAR')][]
# Team Direction Side Relation
#1: Joe L L NEAR
#2: Eric R R NEAR
#3: Tim L R FAR
数据
df1我们可以首先过滤其中包含“-”
的行,删除所有内容,直到“-”
为止,并使用if_else
将'NEAR'
或'FAR'
值分配给关系
library(dplyr)
library(stringr)
df %>%
filter(str_detect(Direction, '-')) %>%
mutate(Direction = str_remove(Direction, '.*-'),
Relation = if_else(Direction == Side, 'NEAR', 'FAR'))
# Team Direction Side Relation
#1 Joe L L NEAR
#2 Eric R R NEAR
#3 Tim L R FAR
library(dplyr)
library(stringr)
df1 %>%
filter(grepl('-', Direction)) %>%
mutate(Direction = str_replace(Direction, '.*-', ''),
Relation = case_when(Direction == Side ~ 'NEAR', TRUE ~ 'FAR'))
# Team Direction Side Relation
#1 Joe L L NEAR
#2 Eric R R NEAR
#3 Tim L R FAR
library(data.table)
setDT(df1)[grepl('-', Direction)][, Direction := trimws(Direction,
whitespace = '.*-')][, Relation := fifelse(Direction == Side, 'NEAR', 'FAR')][]
# Team Direction Side Relation
#1: Joe L L NEAR
#2: Eric R R NEAR
#3: Tim L R FAR
df1 <- structure(list(Team = c("Joe", "Eric", "Tim", "Mike"), Direction = c("HB-L",
"HB-R", "FB-L", "HB"), Side = c("L", "R", "R", "L")),
class = "data.frame", row.names = c(NA,
-4L))
library(dplyr)
library(stringr)
df %>%
filter(str_detect(Direction, '-')) %>%
mutate(Direction = str_remove(Direction, '.*-'),
Relation = if_else(Direction == Side, 'NEAR', 'FAR'))
# Team Direction Side Relation
#1 Joe L L NEAR
#2 Eric R R NEAR
#3 Tim L R FAR