繁体   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