繁体   English   中英

根据另一列的内容在R中新建一列【具体案例】

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM