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