[英]Create a new column in R based on the content of another column [specific case]
我正在寻找一种修改我的 data.set 的聪明方法。 如果我能做到,那将节省很多时间
我的数据集看起来像这样
column1
1.0
1.0
2.0
2.0.15
0.0
1.0.30
我想创建一个新的“父母栏”,在其中保留第 1 栏的第一部分
column1 column2
1.0 1
1.0 1
2.0 2
2.0.15 2.0
0.0 0
1.0.30 1.0
我想这样做的原因是我想在元素之间重新创建父子关系。 第 2 列应该是父母,第 1 列是它的后代。 非常感谢任何帮助。
使用tidyverse
和正则表达式的一种选择:
library(tidyverse)
orig <- tribble(
~column1,
"1.0",
"1.0",
"2.0",
"2.0.15",
"0.0",
"1.0.30"
)
orig
#> # A tibble: 6 x 1
#> column1
#> <chr>
#> 1 1.0
#> 2 1.0
#> 3 2.0
#> 4 2.0.15
#> 5 0.0
#> 6 1.0.30
orig %>%
mutate(parent = str_replace(column1, "\\.\\d+$", ""))
#> # A tibble: 6 x 2
#> column1 parent
#> <chr> <chr>
#> 1 1.0 1
#> 2 1.0 1
#> 3 2.0 2
#> 4 2.0.15 2.0
#> 5 0.0 0
#> 6 1.0.30 1.0
由reprex package (v0.3.0) 创建于 2020 年 8 月 5 日
正则表达式\\.\\d+$
采用文字点.
后跟一个或多个数字,然后是字符串$
的结尾,并将此匹配替换为空""
。 另请参阅https://regexr.com/59lnl (其中$
行的末尾替换为换行符\n
)。
尝试这个:
#Data
df <- structure(list(column1 = c("1.0", "1.0", "2.0", "2.0.15", "0.0",
"1.0.30")), row.names = c(NA, -6L), class = "data.frame")
#Code
#Create column
df$column2 <- sub("^(.*)[.].*", "\\1", df$column1)
Output:
column1 column2
1 1.0 1
2 1.0 1
3 2.0 2
4 2.0.15 2.0
5 0.0 0
6 1.0.30 1.0
df$column2 <- sub("\\.[0-9]+$", "", df$column1)
df
# column1 column2
# 1 1.0 1
# 2 1.0 1
# 3 2.0 2
# 4 2.0.15 2.0
# 5 0.0 0
# 6 1.0.30 1.0
数据
df <- data.frame(column1 = c("1.0", "1.0", "2.0", "2.0.15", "0.0", "1.0.30"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.