根据 R 中字符串的长度创建新值?
Create new values based on length of a string in R?
我有一个问题,理想情况下,我需要根据字符串的长度创建新值和新行。
这是我的源数据:
NumericCode1=c("12345","1234")
NumericCode2=c("0123.45","123.4")
AlphaCode=c("","")
df=data.frame(NumericCode1,NumericCode2,AlphaCode)
我想做的是使用以下逻辑处理这些数据:
如果 NumericCode1 或 NumericCode2 中的任何一个值大于 5(仅计算数字),那么我想用每个值的 AA:BB:CC 填充 AlphaCode。所以 df 最终看起来像这样:
NumericCode1=c("12345","1234")
NumericCode2=c("0123.45","123.4")
AlphaCode=c("AA:BB:CC","")
df=data.frame(NumericCode1,NumericCode2,AlphaCode)
然后我可以使用此代码为每个创建单独的记录并获得我想要的输出。
df %>%
separate_rows(AlphaCode, sep=":")
NumericCode1 NumericCode2 AlphaCode
1 12345 0123.45 AA
2 12345 0123.45 BB
3 12345 0123.45 CC
4 1234 123.4
我的问题是我卡在了第一步。我可以使用 nchar
或 str_lenght
计算字符串中的字符数,但我不知道如何“count if > 5 then do this”。
很有帮助appreciated.Thanks!
您可以使用replace
cond <- nchar(sub("\D", "", df$NumericCode1)) > 5 | nchar(sub("\D", "", df$NumericCode2)) > 5
df$AlphaCode <- replace(df$AlphaCode,
cond,
"AA:BB:CC")
df
# NumericCode1 NumericCode2 AlphaCode
#1 12345 0123.45 AA:BB:CC
#2 1234 123.4
条件表示如果 NumericCode1
或 NumericCode2
超过 5 个字符 - 仅限数字 - 将 ""
替换为 AA:BB:CC
。
数据
df = data.frame(NumericCode1, NumericCode2, AlphaCode, stringsAsFactors = FALSE)
# ^^^^^^^^^^^^^^^^^^^^^^^^
使用stringr::str_count
和\d
我们只能数数
library(dplyr)
library(stringr)
df %>% mutate(Cond=if_else(str_count(NumericCode1,'\d')>5|str_count(NumericCode2,'\d')>5 ,
'AA:BB:CC',''))
NumericCode1 NumericCode2 Cond
1 12345 0123.45 AA:BB:CC
2 1234 123.4
我有一个问题,理想情况下,我需要根据字符串的长度创建新值和新行。
这是我的源数据:
NumericCode1=c("12345","1234")
NumericCode2=c("0123.45","123.4")
AlphaCode=c("","")
df=data.frame(NumericCode1,NumericCode2,AlphaCode)
我想做的是使用以下逻辑处理这些数据:
如果 NumericCode1 或 NumericCode2 中的任何一个值大于 5(仅计算数字),那么我想用每个值的 AA:BB:CC 填充 AlphaCode。所以 df 最终看起来像这样:
NumericCode1=c("12345","1234")
NumericCode2=c("0123.45","123.4")
AlphaCode=c("AA:BB:CC","")
df=data.frame(NumericCode1,NumericCode2,AlphaCode)
然后我可以使用此代码为每个创建单独的记录并获得我想要的输出。
df %>%
separate_rows(AlphaCode, sep=":")
NumericCode1 NumericCode2 AlphaCode
1 12345 0123.45 AA
2 12345 0123.45 BB
3 12345 0123.45 CC
4 1234 123.4
我的问题是我卡在了第一步。我可以使用 nchar
或 str_lenght
计算字符串中的字符数,但我不知道如何“count if > 5 then do this”。
很有帮助appreciated.Thanks!
您可以使用replace
cond <- nchar(sub("\D", "", df$NumericCode1)) > 5 | nchar(sub("\D", "", df$NumericCode2)) > 5
df$AlphaCode <- replace(df$AlphaCode,
cond,
"AA:BB:CC")
df
# NumericCode1 NumericCode2 AlphaCode
#1 12345 0123.45 AA:BB:CC
#2 1234 123.4
条件表示如果 NumericCode1
或 NumericCode2
超过 5 个字符 - 仅限数字 - 将 ""
替换为 AA:BB:CC
。
数据
df = data.frame(NumericCode1, NumericCode2, AlphaCode, stringsAsFactors = FALSE)
# ^^^^^^^^^^^^^^^^^^^^^^^^
使用stringr::str_count
和\d
我们只能数数
library(dplyr)
library(stringr)
df %>% mutate(Cond=if_else(str_count(NumericCode1,'\d')>5|str_count(NumericCode2,'\d')>5 ,
'AA:BB:CC',''))
NumericCode1 NumericCode2 Cond
1 12345 0123.45 AA:BB:CC
2 1234 123.4