2013-05-23 2 views
0

У меня есть объект в R, который выглядит, как этотКак создать переменную на основе выбранных символов из row.names?

     Value 
    AAAAA.1569.12.32 5 
    C.4586.25.65  2 
    AAAAA.4568.32.54 2 
    BBB.5462.23.32  3 
    BBB.5425.36.25  5 
    C.5658.25.24  4 

и я хочу, чтобы это выглядело как этот

     Value Name 
    AAAAA.1569.12.32 5  AAAAA 
    C.4586.25.65  2  C 
    AAAAA.4568.32.54 2  AAAAA 
    BBB.5462.23.32  3  BBB 
    BBB.5425.36.25  5  BBB 
    C.5658.25.24  4  C 

я использовал

df$Name = rownames(df) 

, но это ставит целую строку из row.names в столбце «Имя». Так или иначе, я просто хочу использовать текст до периода (без периодов или цифр). Кто-нибудь знает, как я могу это сделать?

Спасибо!

ответ

2

В частности, сохранить весь текст до первого . характера:

df$Name <- sub('[.].*','', rownames(df)) 

В регулярном выражении, . означает любой символ. Таким образом, чтобы соответствовать буквальной точке, символ должен быть экранирован. Однако в классе символов (ограниченном [ и ]) . представляет собой буквальную точку. То есть [.] соответствует буквальной точке.

После этого .*, который соответствует любому количеству символов.

Таким образом, выражение соответствует всем значениям от первого литерала . до конца строки и заменяет его пустой строкой.

+0

Удивительно, ничего себе! и спасибо за быстрый ответ! – Thomas

+0

Я не совсем понимаю, как работают первые 2 вещи в подкоманде ... любой шанс вы могли бы объяснить это? – Thomas

+0

@ user1824929 под редакцией. –

2

Вот два альтернативных способа. 1 основание и 1 в qdap:

## df <- structure(list(Value = c(5L, 2L, 2L, 3L, 5L, 4L)), .Names = "Value", class = "data.frame", row.names = c("AAAAA.1569.12.32", 
##  "C.4586.25.65", "AAAAA.4568.32.54", "BBB.5462.23.32", "BBB.5425.36.25", 
##  "C.5658.25.24")) 

df$Name <- sapply(strsplit(rownames(df), "\\."), "[", 1) 

library(qdap) 
df$Name <- beg2char(rownames(df), ".") 
+0

Является ли 'beg2char' чем-то вроде' substring (rownames (df), 1, regexpr ("\\.", Rownames (df)) - 1) '? – thelatemail

+0

Код не скрыт вообще. В командной строке используется regex 'beg2char'. Он может выполнять более сложные вещи, такие как 'beg2char (rownames (df),". ", 2); beg2char (rownames (df), ".", 3) 'См. см.' char2end'. char обозначает любого персонажа. –

+0

Спасибо Tyler, я просто использую ваше решение qdap для соответствующей проблемы. знак равно – Thomas

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