2017-05-19 1 views
1

Ich kann die vorhandenen Lösungen in diesem Forum nicht anpassen, die sich auf das Teilen von Datenrahmenspalten in zwei konzentrieren.Geteilte Spalte im Datenrahmen in R bei einem '%' Zeichen

Ich habe diesen Datenrahmen (die komischerweise bereits aufgeteilt, um es so aussehen zu lassen), , die ich brauche

enter image description here

Das Endergebnis auf dem Symbol% ​​aufgeteilt werden I möchte, werden die 32%, 35%, 54% ... 55% gelöscht. Es sind also nur zwei Datenspalten. Diese Daten werden von einer Website abgerufen.

Danke

+0

strsplit (x = Long, split = "[%]") [[1]] [2] –

+0

Nur für ein einzelnes Element, sorry. Ansonsten: sapply (Ihre.df $ Long, Funktion (x) strsplit (x, "[%]") [[1]] [2]) –

Antwort

2
df$Long<-sapply(strsplit(as.character(df$Long), split= "\\%"),'[',2)   
    Long Short 
1 239 497 
2 142 269 
3 216 186 
4 96 52 
5 93 184 
6 160 142 
7 96 79 
1

Dies sollte es tun:

df$Long <- paste0(unlist(lapply(strsplit(a, "%"), `[[`, 1)), "%") 

Es jede Saite in jedem Split in Long Spalte teilt durch "%" und erhält das erste Element. Dann fügt es das "%" zum Ende des resultierenden Vektors hinzu.

1

würde ich tidyr und dplyr für diesen Einsatz:

library(dplyr) 
library(tidyr) 

data.frame(Long = c("32% 239", "35% 142", "54% 216"), Short = c(497,269,186), stringsAsFactors = F) %>% 
    separate(Long, c("Long_percent","Long_2"), sep = " ") %>% 
    select(-Long_percent) 

Oder Sie können auch einen regulären Ausdruck verwenden, was nützlich sein könnte, wenn die Daten nicht so gut ausgebildet sind:

data.frame(Long = c("32% 239", "35% 142", "54% 216"), Short = c(497,269,186), stringsAsFactors = F) %>% 
    mutate(Long = gsub("[0-9%]+ ", "", Long, perl = T)) 
Verwandte Themen