簡體   English   中英

在依賴不同子字符串的單獨列中創建值

[英]Creating values in separate columns that are dependent on different substrings

在對某些寬格式數據使用melt之后,我在R中具有以下數據框:

Condition value
C1SSC     4.5
C2SSC     7.7
TC1SSC    6.0
TC2SSC    7.3
PC1SSC    4.5
PC2SSC    5.7

每個字符或子字符串都有特定含義(例如,TC2SSC表示用兩只眼睛[2]觀察到紋理化的[T]圓圈[C],並且響應“起始形狀”是圓圈[SSC]的情況)。

我想要做的是生成依賴於這些字符和子字符串的新變量列-一個用於紋理,一個用於形狀,等等。 我考慮過使用greplsubstr ,但是我不確定它們是否可以評估字符串的特定部分(即確定形狀時,檢查前兩個字符以查看它們是否包含'C')。

理想情況下,這就是我要得到的結果(例如TC2SSC):

Texture    Shape    View    startShape    value
T          Circle   2       Circle        4.5

有很多有用的功能,但我不確定在這里最好使用哪個功能。 任何建議將不勝感激。

這是解決問題的一種直接方法。 基本上,使用帶有gsub的模式在要“分割”的每個字符(此處為“ _”)之后插入一個字符,然后在其上使用strsplit 這是如何做:

split.df <- data.frame(do.call(rbind, strsplit(gsub("(C|SSC|[0-9]+)", "_\\1_", 
                      dt$Condition), "[_]+")), stringsAsFactors=FALSE)

#   X1 X2 X3  X4
# 1     C  1 SSC
# 2     C  2 SSC
# 3  T  C  1 SSC
# 4  T  C  2 SSC
# 5  P  C  1 SSC
# 6  P  C  2 SSC

現在,其余的操作非常簡單(更改名稱,轉換類並將C替換為圓形等)。

names(split.df) <- c("Texture", "Shape", "View", "startShape")
split.df <- within(split.df, { Shape[Shape == "C"] <- "Circle" 
            View <- as.numeric(View)
            startShape[startShape == "SSC"] <- "Circle"} )
cbind(split.df, value = df$value)

#   Texture  Shape View startShape df$value
# 1         Circle    1     Circle      4.5
# 2         Circle    2     Circle      7.7
# 3       T Circle    1     Circle      6.0
# 4       T Circle    2     Circle      7.3
# 5       P Circle    1     Circle      4.5
# 6       P Circle    2     Circle      5.7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM