簡體   English   中英

從R中的另一列創建一列並為其供電

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM