[英]R: Create a new column in r with concatenated values from another column
[英]create and power a column from another column in R
目的是從下面數據的“代碼”列中創建兩個新列。 一個帶有數字,另一個帶有代碼(因數)。 我怎么做? 我嘗試了ifelse()
,但結果ifelse()
了。
structure(list(Potreiro = structure(c(3L, 3L, 3L, 3L,
3L, 4L, 3L, 4L, 3L, 4L), .Label = c("1A", "6B", "7A", "7B"), class =
"factor"), Code = structure(c(4L, 1L, 8L, 3L, 2L, 4L, 6L, 5L, 8L, 7L ),
.Label = c("2", "3", "4", "5", "50%", "70%", "ac", "ad", "av", "cd", "de",
"Dem"), class = "factor")), .Names = c("Potreiro", "Code"), row.names =
c(NA, 10L), class = "data.frame")
謝謝!!!
library(dplyr)
library(stringr)
df <- structure(list(Potreiro = structure(c(3L, 3L, 3L, 3L, 3L, 4L, 3L, 4L, 3L, 4L),
.Label = c("1A", "6B", "7A", "7B"),
class = "factor"),
Code = structure(c(4L, 1L, 8L, 3L, 2L, 4L, 6L, 5L, 8L, 7L ),
.Label = c("2", "3", "4", "5", "50%", "70%", "ac", "ad", "av", "cd", "de", "Dem"),
class = "factor")),
.Names = c("Potreiro", "Code"),
row.names = c(NA, 10L),
class = "data.frame")
df %>%
mutate(
number = str_extract_all(Code, "\\d+"),
word = str_extract(Code, "\\D[^%]")
)
number
變量regex尋找數字,並且至少匹配一次\\\\d+
。 word
正則表達式在刪除%符號時不查找數字。
結果:
Potreiro Code number word
1 7A 5 5 <NA>
2 7A 2 2 <NA>
3 7A ad ad
4 7A 4 4 <NA>
5 7A 3 3 <NA>
6 7B 5 5 <NA>
7 7A 70% 70 <NA>
8 7B 50% 50 <NA>
9 7A ad ad
10 7B ac ac
我會這樣做:
df <-
structure(list(Potreiro = structure(c(3L, 3L, 3L, 3L,
3L, 4L, 3L, 4L, 3L, 4L), .Label = c("1A", "6B", "7A", "7B"), class =
"factor"), Code = structure(c(4L, 1L, 8L, 3L, 2L, 4L, 6L, 5L, 8L, 7L ),
.Label = c("2", "3", "4", "5", "50%", "70%", "ac", "ad", "av", "cd", "de",
"Dem"), class = "factor")), .Names = c("Potreiro", "Code"), row.names =
c(NA, 10L), class = "data.frame")
arenum <- sapply(df$Code, function (x) grepl('[[:digit:]]', x))
df$codenum <- ifelse(arenum, as.character(df$Code), NaN)
df$codechar <- ifelse(!arenum, as.character(df$Code), NaN)
df
如果您真的不想要什么,除了數字更改arnum:
arenum <- sapply(df$Code, function (x) gsub('[[:digit:]]', '', x) == '')
這是使用extract
的選項
library(dplyr)
library(tidyr)
df %>%
extract(Code, into = c('number', 'word'), '(\\d*)([a-z]*)', remove = FALSE, convert = TRUE)
# Potreiro Code number word
#1 7A 5 5
#2 7A 2 2
#3 7A ad NA ad
#4 7A 4 4
#5 7A 3 3
#6 7B 5 5
#7 7A 70% 70
#8 7B 50% 50
#9 7A ad NA ad
#10 7B ac NA ac
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.