【问题标题】:how do i split one vector element into two?如何将一个向量元素一分为二?
【发布时间】:2017-10-30 18:26:11
【问题描述】:

我有以下代码:

file_list <- list.files(path=folder, pattern="*.txt") ##creates list of all txt. files in folder

file_list

o<- file_list[order(as.numeric(gsub(".+_(\\d+)\\.txt$", "\\1", file_list)))]## orders list in numerical order by ending 

r <- sapply(o, FUN = function(x){

  df = read.table(x, skip=1) ##x is the file name from list 

  mean(df$V4)

}) ###takes mean of selected column from entire list and produces below output

这提供了以下输出:

172010_001_120VC_0.1_1100.txt   3.817672e-07
172010_001_120VC_0.1_1080.txt   3.893099e-07 
172010_001_120VC_0.1_1090.txt   4.386539e-07 

如何将输出转换为向量/数据框 x= txt 文件标签的最后一位数字(1100、1080、1090 等,y = 数值(3.817672e-07、3.893099e-07 , 4.386539e-07 等)

【问题讨论】:

    标签: r dataframe split


    【解决方案1】:

    由于本例中所有向量元素的长度相同,您可以通过直接提供字符位置来使用substr() 函数(仅在base 包中。)。

    创建问题中给出的输出

    vec <- c("172010_001_120VC_0.1_1100.txt   3.817672e-07","172010_001_120VC_0.1_1080.txt   3.893099e-07","172010_001_120VC_0.1_1090.txt   4.386539e-07")
    

    问题中给出的打印输出

    vec
    # [1] "172010_001_120VC_0.1_1100.txt   3.817672e-07"
    # [2] "172010_001_120VC_0.1_1080.txt   3.893099e-07"
    # [3] "172010_001_120VC_0.1_1090.txt   4.386539e-07"
    

    使用substr() 函数所需的结果

    df <- data.frame(x = substr(vec, 22, 25), y = substr(vec, 33, 44))
    df
    #      x            y
    # 1 1100 3.817672e-07
    # 2 1080 3.893099e-07
    # 3 1090 4.386539e-07
    

    【讨论】:

    • 您提供的输出是我所追求的,但大约有 100 个文件,是否有办法在不手动输入所有文件的情况下采用您的方法?所有 100 的长度都相同
    • 您的意思是代码输出中有 100 个文件,对吗?
    • vec 应该将这些文件的名称和数值作为单个字符串......所以这段代码很容易工作。像我一样将你的输出存储在一个向量中。正如您所说,这些是上述代码的输出......所以只需将其存储在一个对象中,无需手动创建向量。在此代码中使用该对象来拆分其每个元素。让我知道是否有任何问题。在您的情况下,对象r 具有所有文件名和数值,请在上述脚本中使用r 对象而不是vec
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2017-08-18
    • 1970-01-01
    相关资源
    最近更新 更多