首页 > 解决方案 > 提取数据框中的字符

问题描述

我有一个这样的数据框

Sample Marker1 Marker2 Marker 3             
Sample1 230/250 301/302 140/150          
Sample2 233/255 304/306 143/158       
Sample3 221/250 304/310 140/152  

我想把 / 标志两边的数字分开来得到这个。所以每列将分为 2 :

Sample  Marker1a Marker1b Marker2a Marker2b Marker3a Marker3b             
Sample1 230      250      301      302      140      150          
Sample2 233      255      304      306      143      158       
Sample3 221      250      304      310      140      152 

我正在尝试使用 list 来做到这一点,但没有成功。也许这里有人会有更好的主意?安妮-索菲

标签: r

解决方案


这是一种解决方案:

# create dataframe
d <- read.table(text='Sample Marker1 Marker2 Marker3             
                Sample1 230/250 301/302 140/150          
                Sample2 233/255 304/306 143/158       
                Sample3 221/250 304/310 140/152 ', 
                header=T, stringsAsFactor=F)

# loop over the Marker columns
for (col in paste0('Marker', 1:3)){

  # create a list of splitted values
  splitted.values <- strsplit(d[[col]], '/')
  # add the first item of each list element to a
  d[[paste0(col, 'a')]] <- sapply(splitted.values, '[', 1)
  # add the second item of each list element to b
  d[[paste0(col, 'b')]] <- sapply(splitted.values, '[', 2)
}

print(d)

   Sample Marker1 Marker2 Marker3 Marker1a Marker1b Marker2a Marker2b Marker3a Marker3b
1 Sample1 230/250 301/302 140/150      230      250      301      302      140      150
2 Sample2 233/255 304/306 143/158      233      255      304      306      143      158
3 Sample3 221/250 304/310 140/152      221      250      304      310      140      152

推荐阅读