簡體   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