Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重命名列中的向量_R_Dataframe - Fatal编程技术网

R 重命名列中的向量

R 重命名列中的向量,r,dataframe,R,Dataframe,我有一个数据框,总结起来,它看起来像这样: CEMETERY SEX CONTEXT RaHD.L RaHD.R 1 Medieval-St. Mary Graces FEMALE 7172 21.2 21.6 2 Medieval-St. Mary Graces MALE 6225 23.9 25.2 3 Medieval-St. Mary

我有一个数据框,总结起来,它看起来像这样:

                            CEMETERY    SEX CONTEXT RaHD.L RaHD.R
1           Medieval-St. Mary Graces FEMALE    7172   21.2   21.6
2           Medieval-St. Mary Graces   MALE    6225   23.9   25.2
3           Medieval-St. Mary Graces   MALE    9987   23.9   23.5
4           Medieval-St. Mary Graces   MALE   11475   22.4   22.3
5           Medieval-St. Mary Graces   MALE   12356   25.8   25.4
6           Medieval-St. Mary Graces   MALE   12525   22.4   22.3
7           Medieval-St. Mary Graces   MALE   12785   22.9   22.6
8           Medieval-St. Mary Graces   MALE   13840   22.5   22.9
9             Medieval-Spital Square FEMALE     383   21.5   22.0
10            Medieval-Spital Square   MALE      31   23.3   22.0
17  Post-Medieval-Chelsea Old Church FEMALE      19   20.0   20.6
18  Post-Medieval-Chelsea Old Church FEMALE      31   19.5   20.0
19  Post-Medieval-Chelsea Old Church FEMALE      39   19.6   19.2
41 Post-Medieval-St. Thomas Hospital FEMALE      60   21.8   22.6
43 Post-Medieval-St. Thomas Hospital   MALE      83   22.4   23.0

我想将墓地列中的向量更改为简单的“中世纪”和“后中世纪”,而不是整个墓地的名称,或者创建一个新的列,说明“中世纪”或“后中世纪”。

我们可以使用
sub
捕获到“中世纪”之前的子字符串,然后在替换中使用反向引用(
\\1
)用于捕获的子字符串

df1$CEMETERY <- sub("(.*(M|m)edieval).*", "\\1", df1$CEMETERY)
df1$CEMETERY
#[1] "Medieval"      "Medieval"      "Medieval"      "Medieval"     
#[5] "Medieval"      "Medieval"      "Medieval"      "Medieval"     
#[9] "Medieval"      "Medieval"      "Post-Medieval" "Post-Medieval"
#[13] "Post-Medieval" "Post-Medieval" "Post-Medieval"

df1$CELLAME如果需要保留位置信息,有一种替代方法,在“中世纪”之后的第一个连字符处拆分
CELLAME
列(包括在“后中世纪”之后拆分),并将这两部分分配给两列
PERIOD
CELLAME

library(data.table)
setDT(DF)[, c("PERIOD", "CEMETERY") := tstrsplit(CEMETERY, "(?<=Medieval)-", perl = TRUE)][]
正则表达式中用于标识要拆分的正确连字符的特性称为正向查找

资料
DF阅读了关于ifelse的内容。那么包含后中世纪数据的行呢?@AislingMurray我修改了代码。它将同时拾取“中世纪”和“中世纪”两个词“是否需要在单词
中世纪
之前添加
*
的目的是什么?不包含这两个词是错误的吗?@onyanbu OP想选择中世纪或后中世纪。
*
表示最多个字符。从示例中,字符串似乎以“中世纪”或“后中世纪”开头。”谢谢你的解释
               CEMETERY    SEX CONTEXT RaHD.L RaHD.R        PERIOD
 1:     St. Mary Graces FEMALE    7172   21.2   21.6      Medieval
 2:     St. Mary Graces   MALE    6225   23.9   25.2      Medieval
 3:     St. Mary Graces   MALE    9987   23.9   23.5      Medieval
 4:     St. Mary Graces   MALE   11475   22.4   22.3      Medieval
 5:     St. Mary Graces   MALE   12356   25.8   25.4      Medieval
 6:     St. Mary Graces   MALE   12525   22.4   22.3      Medieval
 7:     St. Mary Graces   MALE   12785   22.9   22.6      Medieval
 8:     St. Mary Graces   MALE   13840   22.5   22.9      Medieval
 9:       Spital Square FEMALE     383   21.5   22.0      Medieval
10:       Spital Square   MALE      31   23.3   22.0      Medieval
11:  Chelsea Old Church FEMALE      19   20.0   20.6 Post-Medieval
12:  Chelsea Old Church FEMALE      31   19.5   20.0 Post-Medieval
13:  Chelsea Old Church FEMALE      39   19.6   19.2 Post-Medieval
14: St. Thomas Hospital FEMALE      60   21.8   22.6 Post-Medieval
15: St. Thomas Hospital   MALE      83   22.4   23.0 Post-Medieval
DF <- readr::read_table(
  "                            CEMETERY    SEX CONTEXT RaHD.L RaHD.R
1           Medieval-St. Mary Graces FEMALE    7172   21.2   21.6
2           Medieval-St. Mary Graces   MALE    6225   23.9   25.2
3           Medieval-St. Mary Graces   MALE    9987   23.9   23.5
4           Medieval-St. Mary Graces   MALE   11475   22.4   22.3
5           Medieval-St. Mary Graces   MALE   12356   25.8   25.4
6           Medieval-St. Mary Graces   MALE   12525   22.4   22.3
7           Medieval-St. Mary Graces   MALE   12785   22.9   22.6
8           Medieval-St. Mary Graces   MALE   13840   22.5   22.9
9             Medieval-Spital Square FEMALE     383   21.5   22.0
10            Medieval-Spital Square   MALE      31   23.3   22.0
17  Post-Medieval-Chelsea Old Church FEMALE      19   20.0   20.6
18  Post-Medieval-Chelsea Old Church FEMALE      31   19.5   20.0
19  Post-Medieval-Chelsea Old Church FEMALE      39   19.6   19.2
41 Post-Medieval-St. Thomas Hospital FEMALE      60   21.8   22.6
43 Post-Medieval-St. Thomas Hospital   MALE      83   22.4   23.0"
)[, -1]