9

同じ列に日付と金利が含まれるデータセットがあります。これら 2 つの数値を 2 つの別々の列に分割する必要がありますが、次のコードを使用すると:

 Split <- str_split(df$Dates, "[ ]", n = 2)
 Dates <- unlist(Split)[1]
 Rates <- unlist(Split)[2]

各要素の最初の「値」のみを返します。つまり、日付の場合は「1971-04-01」、レートの場合は「7.43」です。文字列分割の部分のすべての値を返し、文字列分割の 2 番目の部分についても同じ値を返す必要があります。

以下はデータセットの一部で、合計行 = 518 です。

    1971-04-01   7.31
    1971-05-01   7.43
    1971-06-01   7.53
    1971-07-01   7.60
    1971-08-01   7.70
    1971-09-01   7.69
    1971-10-01   7.63
    1971-11-01   7.55
    1971-12-01   7.48
    1972-01-01   7.44

ありがとう

4

7 に答える 7

12

出来ました

Split <- strsplit(as.character(df$Dates), " ", fixed = TRUE)
Dates <- sapply(Split, "[", 1)
Rates <- sapply(Split, "[", 2)
于 2014-06-30T18:24:38.110 に答える
2

@ user2583119 のデータを使用する (データ セットを含む最小限の再現可能なコードを投稿してください):

library(qdap)
colsplit2df(data.frame(Split), sep = " ")

##           X1   X2
## 1 1971-06-01 7.53
## 2 1971-05-01 7.43
## 3 1971-06-01 7.53
于 2014-06-30T18:43:54.057 に答える
1

また:

 Split <- c("1971-06-01 7.53", "1971-05-01 7.43", "1971-06-01 7.53")

コードは最初の観測のみを選択します。

 Str <- unlist(str_split(Split, "[ ]", n=2))
 Str[1] 
 #[1] "1971-06-01"

outputunlist(..)を見ると、日付の後に値が続きます。したがって、論理インデックスを使用できます。

Str[c(T,F)]
#[1] "1971-06-01" "1971-05-01" "1971-06-01"

as.numeric(Str[c(F,T)])
#[1] 7.53 7.43 7.53

Splitを使用して、データフレームの 2 つの列に変換できます。read.table

  read.table(text=Split, header=F, sep="",stringsAsFactors=F)
 #         V1   V2
 # 1 1971-06-01 7.53
 # 2 1971-05-01 7.43
 # 3 1971-06-01 7.53
于 2014-06-30T18:43:42.107 に答える
1
df <- data.frame(
Date = c("1971-04-01   7.31", "1971-05-01   7.43", "1971-06-01   7.53", 
         "1971-07-01   7.60", "1971-08-01   7.70", "1971-09-01   7.69", 
         "1971-10-01   7.63", "1971-11-01   7.55", "1971-12-01   7.48", 
         "1972-01-01   7.44"))

do.call(rbind, strsplit(as.character(df$Date), split = '\\s+', fixed = FALSE))
于 2017-03-09T03:34:41.067 に答える
0

これを試して:

Split <- c("1971-06-01 7.53", "1971-05-01 7.43", "1971-06-01 7.53")
df <- unlist(str_split(string = Split, pattern = "\\s"))
df
于 2014-06-30T18:24:01.963 に答える