2016-11-12 2 views
0

У меня есть следующий набор данныхКак удалить дублированный сцепленную строку в R

path  value 
1 b,b,a,c  3 
2  c,b  2 
3  a 10 
4 b,c,a,b  0 
5  e,f  0 
6  a,f  1 

ф.р.
df <- data.frame (path= c("b,b,a,c", "c,b", "a", "b,c,a,b" ,"e,f" ,"a,f"), value = c(3,2,10,0,0,1)) 

, и я хочу, чтобы удалить дублируется в пути колонны. когда я использую этот код формат данных изменений:

df$path <- sapply(strsplit(as.character(df$path), split=","), 
            function(x) unique(x)) 

, и это дает мне данные, как dataframe

path    value 
1 c("b", "a", "c")  3 
2 c("c", "b ")  2 
... 

Однако, я хотел бы иметь данные так:

path value 
1 b, a, c  3 
2 c, b  2 
3  a 10 
4 b, c, a  0 
5 e, f  0 
6 a, f  1 
+1

Вы действительно можете оставить его в качестве столбца списка, если вы используете 'lapply' вместо' sapply', который может быть более полезным в долгосрочной перспективе: 'ф.р. $ <путь - lapply (strsplit (as.character (df ​​$ path), ','), уникальный) 'и, как представляется, печатается одинаково. – alistaire

ответ

1

замените unique(x) на paste(unique(x), collapse = ', '), или toString(unique(x)), как предложил Фрэнк.

df <- data.frame (
    path= c("b,b,a,c", "c,b", "a", "b,c,a,b" ,"e,f" ,"a,f"), 
    value = c(3,2,10,0,0,1)) 

df$path <- sapply(strsplit(as.character(df$path), split=","), 
        function(x) paste(unique(x), collapse = ', ')) 

# or 
df$path <- sapply(strsplit(as.character(df$path), split=","), 
        function(x) toString(unique(x))) 

df 
#  path value 
# 1 b, a, c  3 
# 2 c, b  2 
# 3  a 10 
# 4 b, c, a  0 
# 5 e, f  0 
# 6 a, f  1 
+0

Это не работает – MFR

+0

@MFR, извините, см. Мое редактирование. – mt1022

+2

Это 'paste (z, collapse =", ")' работает как 'toString (z)' здесь, я думаю. – Frank

Смежные вопросы