2016-09-21 1 views
0

많은 최적화 옵션이없는 소프트웨어에서 얻은 많은 양의 원시 데이터가 있습니다. 내가 csv로 변환 및 R로 읽을 때 ,이를 구하십시오어떻게하면 열 쌍을 행으로 이동하고 동시에 ID를 만들 수 있습니까?

enter image description here

당신이 볼 수 있듯이, 나는 데이터의 15 가지 팩에 대한 변수의 2 종류, ForceTime을 보유하고 있습니다. 난 단지 2 열 그룹에 힘과 시간의 모든 데이터를 원하고, 모든 데이터 세트의 ID와 같은 것을 세 번째 열을 만들 : 나는 기능 gather()을 tidyr 사용하여 시도

ID      | Force| Time 
------------------------------------ 
SR_1.5x1.5x1.5_90s 001 | 52.2 | 0.00 
SR_1.5x1.5x1.5_90s 001 | 55.3 | 0.04 
...     | ... | ... 
SR_1.5x1.5x1.5_90s 002 | 64.8 | 0.00 
SR_1.5x1.5x1.5_90s 002 | 69.6 | 0.04 

하지만 결과는 satisfatory하지 않았다 .

내가 여기 만드는 첫 번째 질문이므로 정보가 누락되면 사과드립니다.

답변

2

당신은 ForceTime 행을 번갈아에 대한 첫 gather 모든 열 다음 spread로합니다. tidyrdplyr를 사용

rtabla1 <- structure(list(SR_1.5x1.5x1.5_90s.001.Force = c(52.2, 55.3, 62.6, 66.5, 70.8, 75.9, 77.6, 78.7, 80.2, 83.8), SR_1.5x1.5x1.5_90s.001.Time = c(0, 0.004, 0.008, 0.012, 0.016, 0.02, 0.024, 0.028, 0.032, 0.036), 
SR_1.5x1.5x1.5_90s.002.Force = c(64.8, 69.6, 76, 80.2, 85.1, 
90.5, 94.1, 95.6, 99.7, 103.4), SR_1.5x1.5x1.5_90s.002.Time = c(0, 
0.004, 0.008, 0.012, 0.016, 0.02, 0.024, 0.028, 0.032, 0.036 
)), .Names = c("SR_1.5x1.5x1.5_90s.001.Force", "SR_1.5x1.5x1.5_90s.001.Time", "SR_1.5x1.5x1.5_90s.002.Force", "SR_1.5x1.5x1.5_90s.002.Time"), row.names = c(NA, -10L), class = "data.frame") 
## SR_1.5x1.5x1.5_90s.001.Force SR_1.5x1.5x1.5_90s.001.Time SR_1.5x1.5x1.5_90s.002.Force SR_1.5x1.5x1.5_90s.002.Time 
##1       52.2      0.000       64.8      0.000 
##2       55.3      0.004       69.6      0.004 
##3       62.6      0.008       76.0      0.008 
##4       66.5      0.012       80.2      0.012 
##5       70.8      0.016       85.1      0.016 
##6       75.9      0.020       90.5      0.020 
##7       77.6      0.024       94.1      0.024 
##8       78.7      0.028       95.6      0.028 
##9       80.2      0.032       99.7      0.032 
##10       83.8      0.036      103.4      0.036 

: 먼저

, 우리는 데이터의 작은 조각을 다시

library(dplyr) 
library(tidyr) 
result <- rtabla1 %>% mutate(Row=seq_len(n())) %>%        ##1. 
         gather("ID","Vals",-Row) %>%        ##2. 
         mutate(FT=ifelse(grepl(".Force$",ID), "Force", "Time"), ##3. 
          ID=sub("(.Force$)|(.Time$)","",ID)) %>% 
         spread(FT,Vals) %>%          ##4. 
         select(-Row) %>%           ##5. 
         arrange(ID)            ##6. 

참고 :

  1. 우선은 식별자 열을 추가 그냥 행 번호.
  2. gather 을 제외한 모든 열 ID 열에는 수집 된 열 이름이 포함됩니다.
  3. mutateID 열은 열 조작을 사용하여 열 FT을 형성합니다. 이 FT 열은 수집 된 행 중 Force이고 어느 것이 Time인지 식별하기 위해 작성됩니다. 이후 spread에서 사용됩니다. 값은 결과의 열 이름 (예 : "Force" 또는 "Time")과 일치하도록 작성됩니다. 여기에서 grepl을 사용하여 ID".Force"으로 끝나는 지 확인하십시오. 그렇다면 FT 열을 "Force"으로 설정하십시오. 그렇지 않은 경우 FT 열을 "Time"으로 설정하십시오. 그런 다음 ID 열을 업데이트하여 ".Force" 또는 ".Time"을 제거합니다.
  4. 이제는 FT을 키로 사용하고 값으로 수집 한 값을 사용하여 spread입니다.
  5. 결과에서 열을 제거하십시오. 데이터의 작은 조각을 사용 ID

result 의해

  • 정렬은 다음과 같이 예상된다

    print(result) 
    ##      ID Force Time 
    ##1 SR_1.5x1.5x1.5_90s.001 52.2 0.000 
    ##2 SR_1.5x1.5x1.5_90s.001 55.3 0.004 
    ##3 SR_1.5x1.5x1.5_90s.001 62.6 0.008 
    ##4 SR_1.5x1.5x1.5_90s.001 66.5 0.012 
    ##5 SR_1.5x1.5x1.5_90s.001 70.8 0.016 
    ##6 SR_1.5x1.5x1.5_90s.001 75.9 0.020 
    ##7 SR_1.5x1.5x1.5_90s.001 77.6 0.024 
    ##8 SR_1.5x1.5x1.5_90s.001 78.7 0.028 
    ##9 SR_1.5x1.5x1.5_90s.001 80.2 0.032 
    ##10 SR_1.5x1.5x1.5_90s.001 83.8 0.036 
    ##11 SR_1.5x1.5x1.5_90s.002 64.8 0.000 
    ##12 SR_1.5x1.5x1.5_90s.002 69.6 0.004 
    ##13 SR_1.5x1.5x1.5_90s.002 76.0 0.008 
    ##14 SR_1.5x1.5x1.5_90s.002 80.2 0.012 
    ##15 SR_1.5x1.5x1.5_90s.002 85.1 0.016 
    ##16 SR_1.5x1.5x1.5_90s.002 90.5 0.020 
    ##17 SR_1.5x1.5x1.5_90s.002 94.1 0.024 
    ##18 SR_1.5x1.5x1.5_90s.002 95.6 0.028 
    ##19 SR_1.5x1.5x1.5_90s.002 99.7 0.032 
    ##20 SR_1.5x1.5x1.5_90s.002 103.4 0.036 
    
  • 관련 문제