在R中首次出现字符串后删除数据

时间:2018-07-11 12:19:36

标签: r dataframe

我在数据框的列中有一个数据,

ROMANIA ~ ROMANIA ~ ROMANIA ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0
SWITZERLAND ~ RUSSIAN FEDERATION ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0  
INDIA ~ 0 ~ 0~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 

以及更多行。

我想在第一次出现零后删除数据。所以最终输出看起来像

ROMANIA ~ ROMANIA ~ ROMANIA
SWITZERLAND ~ RUSSIAN FEDERATION
INDIA

3 个答案:

答案 0 :(得分:1)

使用gsub" ~ 0"(包括" ~ 0 ")第一次出现后的所有内容替换为""(=无)

v <- c("ROMANIA ~ ROMANIA ~ ROMANIA ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0",
       "SWITZERLAND ~ RUSSIAN FEDERATION ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0",
       "INDIA ~ 0 ~ 0~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0" )

gsub(" ~ 0.*", "", v)

#[1] "ROMANIA ~ ROMANIA ~ ROMANIA"      "SWITZERLAND ~ RUSSIAN FEDERATION" "INDIA"    

答案 1 :(得分:1)

数据:

library(magrittr)
df <- data.table::fread("
ROMANIA ~ ROMANIA ~ ROMANIA ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0
SWITZERLAND ~ RUSSIAN FEDERATION ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0  
                  INDIA ~ 0 ~ 0~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0 ~ 0",header=F,sep="~") %>% as.data.frame
#            V1                 V2      V3 V4 V5 V6 V7 V8 V9 V10
# 1     ROMANIA            ROMANIA ROMANIA  0  0  0  0  0  0   0
# 2 SWITZERLAND RUSSIAN FEDERATION       0  0  0  0  0  0  0   0
# 3       INDIA                  0       0  0  0  0  0  0  0   0

代码:

df[,sapply(df,function(x)as.numeric(x) %>% {sum(.==0,na.rm=T) != length(x)})]

结果:

#           V1                 V2      V3
#1     ROMANIA            ROMANIA ROMANIA
#2 SWITZERLAND RUSSIAN FEDERATION       0
#3       INDIA                  0       0

答案 2 :(得分:0)

由于您没有正确提供示例数据,因此我无法完全对其进行测试,请尝试执行以下操作。

{{1}}