こんにちは、いくつかの行のリストとして複数の値を含むデータフレームがあります。
var1
A8
A9
c("A1", "A1", "D3")
c("A1", "D1")
c("D1", "D1")
c("D2", "A2")
c("D5", "A1")
最初の観察を維持することにより、複数の値を持つ行を「リストから外す」ことを試みています。unlist コマンドを試してみましたが、うまくいきませんでした。このタスクを達成する最も簡単な方法は何ですか。
こんにちは、いくつかの行のリストとして複数の値を含むデータフレームがあります。
var1
A8
A9
c("A1", "A1", "D3")
c("A1", "D1")
c("D1", "D1")
c("D2", "A2")
c("D5", "A1")
最初の観察を維持することにより、複数の値を持つ行を「リストから外す」ことを試みています。unlist コマンドを試してみましたが、うまくいきませんでした。このタスクを達成する最も簡単な方法は何ですか。
コメントに示されているように、列は最初にを使用character
して現在のクラスからクラス
に強制 (変換) する必要があります。factor
as.character
これは、パラメーターを使用してファイル読み取り段階で回避できます。stringsAsFactors=FALSE
各行を分割して最初の値のみを保持するには、次のようにします。
copyDF$Var1 = sapply(strsplit(copyDF$Var1,","),head,1)
これが機能するかどうかお知らせください:
#user input data with factor class
userDF = structure(list(Var1 = structure(1:6, .Label = c("", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "c(\"B1\", \"B1\")", "c(\"B3\", \"B4\")", "c(\"B4\", \"B2\")"), class = "factor"), Freq = c(2538L, 633L, 458L, 328L, 135L, 56L)), .Names = c("Var1", "Freq"), row.names = c(NA, 6L), class = "data.frame")
userDF
# Var1 Freq
#1 2538
#2 B1 633
#3 B2 458
#4 B3 328
#5 B4 135
#6 B5 56
str(userDF)
# 'data.frame': 6 obs. of 2 variables:
#$ Var1: Factor w/ 12 levels "","B1","B2","B3",..: 1 2 3 4 5 6
#$ Freq: int 2538 633 458 328 135 56
#Since userDF had no multiple values, adding them here
newDF = structure(list(Var1 = structure(1:6, .Label = c("B1,B2,B3", "B4,B5", "B6,B7,B8", "B3", "B4", "B5", "B6", "B7", "B8", "c(\"B1\", \"B1\")", "c(\"B3\", \"B4\")", "c(\"B4\", \"B2\")"), class = "factor"), Freq = c(2538L, 633L, 458L, 328L, 135L, 56L)), .Names = c("Var1", "Freq"), row.names = c(NA, 6L), class = "data.frame")
newDF
# Var1 Freq
#1 B1,B2,B3 2538
#2 B4,B5 633
#3 B6,B7,B8 458
#4 B3 328
#5 B4 135
#6 B5 56
#Make a copy of the dataset
copyDF = newDF
#Var1 is of class factor which is not amenable for string operations,hence convert to character class
copyDF$Var1 = as.character(copyDF$Var1)
#Split each row, unlist and retain only first value
copyDF$Var1 = sapply(strsplit(copyDF$Var1,","),head,1)
copyDF
# Var1 Freq
#1 B1 2538
#2 B4 633
#3 B6 458
#4 B3 328
#5 B4 135
#6 B5 56