Як я магу змяніць гэтыя дадзеныя?

У мяне ёсць некаторыя дадзеныя, каб змяніць у <�моцны> R , але не магу зразумець, якім чынам. Вось сцэнар: У мяне ёсць дадзеныя, як гэта

a<- c("exam1", "exam2", "exam3","exam4")
date1<- c(8.2,4.3,6.7,3.9)
date2<- c(11.2,9.3,6.5,4.1)
date3<- c(8.2,9.1,4.3,4.4)
dr.df.a <- cbind(a,date1,date2,date3)
    a       date1 date2  date3
[1,] "exam1" "8.2" "11.2" "8.2"
[2,] "exam2" "4.3" "9.3"  "9.1"
[3,] "exam3" "6.7" "6.5"  "4.3"
[4,] "exam4" "3.9" "4.1"  "4.4"
b<- c("exam1", "exam2", "exam3","exam4")
date1<- c(8.6,14.3,6.7,13.9)
date2<- c(11.2,8.3,16.5,14.1)
date3<- c(4.2,9.1,4.3,14.4)
dr.df.b <- cbind(b,date1,date2,date3)
   b       date1  date2  date3 
[1,] "exam1" "8.6"  "11.2" "4.2" 
[2,] "exam2" "14.3" "8.3"  "9.1" 
[3,] "exam3" "6.7"  "16.5" "4.3" 
[4,] "exam4" "13.9" "14.1" "14.4"

mylist<����������

��ыклад для прайграванай прапаноўвае. Я атрымліваю дадзеныя ў гэтым фармаце (dr.df.a і dr.df.b) Ёсць некалькі кадраў дадзеных у спіс аб'ектаў.
Цяпер мне трэба, каб змяніць гэта спосаб, каб атрымаць адну адзіную радок і імёны зменных, як <�Код> exam1_date1, exam1_date2, exam1_date3, exam2_date1, exam2_date2 ... і гэтак далей, і па сутнасці, я хацеў бы атрымаць кадр дадзеных з радамі exam1_date1, exam1_date2, exam1_date3, exam2_date1, exam2_date2 ... для кожнага кадра дадзеных у аб'екце спісу. Як я магу змяніць гэтыя дадзеныя і якія функцыі я павінен выкарыстоўваць?

0
Які аб'ект ўяўляе ўваход? Што такое Выхад для? Ён мае толькі два радкі і ніякіх лічбаў не ў гэтым.
дададзена аўтар G. Grothendieck, крыніца
Які аб'ект ўяўляе ўваход? Што такое Выхад для? Ён мае толькі два радкі і ніякіх лічбаў не ў гэтым.
дададзена аўтар G. Grothendieck, крыніца
Які аб'ект ўяўляе ўваход? Што такое Выхад для? Ён мае толькі два радкі і ніякіх лічбаў не ў гэтым.
дададзена аўтар G. Grothendieck, крыніца
Што б выхад выглядаць?
дададзена аўтар Roman Luštrik, крыніца
Што б выхад выглядаць?
дададзена аўтар Roman Luštrik, крыніца
Можа быць выйсьце не падабаецца імя! Мой спіс з'яўляецца спісам дадзеных фрэймаў, якія я павінен апрацаваць.
дададзена аўтар Rafik Margaryan, крыніца
Можа быць выйсьце не падабаецца імя! Мой спіс з'яўляецца спісам дадзеных фрэймаў, якія я павінен апрацаваць.
дададзена аўтар Rafik Margaryan, крыніца
Можа быць выйсьце не падабаецца імя! Мой спіс з'яўляецца спісам дадзеных фрэймаў, якія я павінен апрацаваць.
дададзена аўтар Rafik Margaryan, крыніца
Выхад будзе як кадр дадзеных, з адным радком і ў гэтым exam1_date1, exam1_date2, exam1_date3, exam2_date1, exam2_date2 ... зменныя. Ці магу я ясна?
дададзена аўтар Rafik Margaryan, крыніца
Выхад будзе як кадр дадзеных, з адным радком і ў гэтым exam1_date1, exam1_date2, exam1_date3, exam2_date1, exam2_date2 ... зменныя. Ці магу я ясна?
дададзена аўтар Rafik Margaryan, крыніца

8 адказы

Паспрабуйце гэта:

library(reshape2)

# convert the first row (the one defined by variable 'a' in post) into column names
dr.df.2 <- setNames(dr.df[-1,], dr.df[1, ])

m <- melt(dr.df.2)

d <- dcast(m, 1 ~ ...)[-1]
names(d) <- sub("_", "_exam", names(d)) # fix up names (optional)

Даючы гэта:

> d
  date1_exam1 date1_exam2 date1_exam3 date1_exam4 date2_exam1 date2_exam2
1         8.2         4.3         6.7         3.9        11.2         9.3
  date2_exam3 date2_exam4 date3_exam1 date3_exam2 date3_exam3 date3_exam4
1         6.5         4.1         8.2         9.1         4.3         4.4

АБНАЎЛЕННЕ: спрошчаны dcast формула

2
дададзена
Усе зменныя знаходзяцца на правай баку формулы, таму мы выкарыстоўваем 1 на левай і ... справа.
дададзена аўтар G. Grothendieck, крыніца
Можа быць, тое, што вы маеце на ўвазе, што dr.df мае дадатковыя слупкі? Паспрабуйце выбраць з жаданых слупкоў першай, напрыклад, <�Код> dr.df.2 <- setNames (dr.df [-1, 1: 4], dr.df [1, 1: 4]) . Калі гэта не так, то забяспечыць прайграваны прыклад.
дададзена аўтар G. Grothendieck, крыніца
Я змяніў прыклад вышэй, каб зрабіць гэта нашмат бліжэй да маёй рэальнай інфармацыі. Як я магу змяніць гэты спіс аб'ект, які змяшчае некалькі фрэймаў дадзеных?
дададзена аўтар Rafik Margaryan, крыніца
Для гэтага прыкладу ваша рашэнне працуе выдатна. Я працую над іншымі файламі, а некаторыя, як адліваная функцыя без ідэнтыфікатар аргумент страчвае розум і выбірае няправільны ідэнтыфікатар. Як я магу сказаць вымаўлення , каб выбраць правільны спосаб структуравання дадзеных? Дзякуючы.
дададзена аўтар Rafik Margaryan, крыніца
Я не магу цалкам зразумець формулу ў гіпсе. Не маглі б вы крыху больш канкрэтна? дзякуй
дададзена аўтар Rafik Margaryan, крыніца

Паспрабуйце гэта:

library(reshape2)

# convert the first row (the one defined by variable 'a' in post) into column names
dr.df.2 <- setNames(dr.df[-1,], dr.df[1, ])

m <- melt(dr.df.2)

d <- dcast(m, 1 ~ ...)[-1]
names(d) <- sub("_", "_exam", names(d)) # fix up names (optional)

Даючы гэта:

> d
  date1_exam1 date1_exam2 date1_exam3 date1_exam4 date2_exam1 date2_exam2
1         8.2         4.3         6.7         3.9        11.2         9.3
  date2_exam3 date2_exam4 date3_exam1 date3_exam2 date3_exam3 date3_exam4
1         6.5         4.1         8.2         9.1         4.3         4.4

АБНАЎЛЕННЕ: спрошчаны dcast формула

2
дададзена
Можа быць, тое, што вы маеце на ўвазе, што dr.df мае дадатковыя слупкі? Паспрабуйце выбраць з жаданых слупкоў першай, напрыклад, <�Код> dr.df.2 <- setNames (dr.df [-1, 1: 4], dr.df [1, 1: 4]) . Калі гэта не так, то забяспечыць прайграваны прыклад.
дададзена аўтар G. Grothendieck, крыніца
Усе зменныя знаходзяцца на правай баку формулы, таму мы выкарыстоўваем 1 на левай і ... справа.
дададзена аўтар G. Grothendieck, крыніца
Я змяніў прыклад вышэй, каб зрабіць гэта нашмат бліжэй да маёй рэальнай інфармацыі. Як я магу змяніць гэты спіс аб'ект, які змяшчае некалькі фрэймаў дадзеных?
дададзена аўтар Rafik Margaryan, крыніца
Для гэтага прыкладу ваша рашэнне працуе выдатна. Я працую над іншымі файламі, а некаторыя, як адліваная функцыя без ідэнтыфікатар аргумент страчвае розум і выбірае няправільны ідэнтыфікатар. Як я магу сказаць вымаўлення , каб выбраць правільны спосаб структуравання дадзеных? Дзякуючы.
дададзена аўтар Rafik Margaryan, крыніца
Я не магу цалкам зразумець формулу ў гіпсе. Не маглі б вы крыху больш канкрэтна? дзякуй
дададзена аўтар Rafik Margaryan, крыніца

Паспрабуйце гэта:

library(reshape2)

# convert the first row (the one defined by variable 'a' in post) into column names
dr.df.2 <- setNames(dr.df[-1,], dr.df[1, ])

m <- melt(dr.df.2)

d <- dcast(m, 1 ~ ...)[-1]
names(d) <- sub("_", "_exam", names(d)) # fix up names (optional)

Даючы гэта:

> d
  date1_exam1 date1_exam2 date1_exam3 date1_exam4 date2_exam1 date2_exam2
1         8.2         4.3         6.7         3.9        11.2         9.3
  date2_exam3 date2_exam4 date3_exam1 date3_exam2 date3_exam3 date3_exam4
1         6.5         4.1         8.2         9.1         4.3         4.4

АБНАЎЛЕННЕ: спрошчаны dcast формула

2
дададзена
Усе зменныя знаходзяцца на правай баку формулы, таму мы выкарыстоўваем 1 на левай і ... справа.
дададзена аўтар G. Grothendieck, крыніца
Можа быць, тое, што вы маеце на ўвазе, што dr.df мае дадатковыя слупкі? Паспрабуйце выбраць з жаданых слупкоў першай, напрыклад, <�Код> dr.df.2 <- setNames (dr.df [-1, 1: 4], dr.df [1, 1: 4]) . Калі гэта не так, то забяспечыць прайграваны прыклад.
дададзена аўтар G. Grothendieck, крыніца
Для гэтага прыкладу ваша рашэнне працуе выдатна. Я працую над іншымі файламі, а некаторыя, як адліваная функцыя без ідэнтыфікатар аргумент страчвае розум і выбірае няправільны ідэнтыфікатар. Як я магу сказаць вымаўлення , каб выбраць правільны спосаб структуравання дадзеных? Дзякуючы.
дададзена аўтар Rafik Margaryan, крыніца
Я змяніў прыклад вышэй, каб зрабіць гэта нашмат бліжэй да маёй рэальнай інфармацыі. Як я магу змяніць гэты спіс аб'ект, які змяшчае некалькі фрэймаў дадзеных?
дададзена аўтар Rafik Margaryan, крыніца
Я не магу цалкам зразумець формулу ў гіпсе. Не маглі б вы крыху больш канкрэтна? дзякуй
дададзена аўтар Rafik Margaryan, крыніца

Калі dr.df аб'ект быў data.frame замест матрыцы, вы можаце лёгка стварыць найменны вектар, як паказана ніжэй:

Стварыце свае дадзеныя, але як data.frame на гэты раз:

a <- c("exam1", "exam2", "exam3","exam4")
date1 <- c(8.2,4.3,6.7,3.9)
date2 <- c(11.2,9.3,6.5,4.1)
date3 <- c(8.2,9.1,4.3,4.4)
dr.df <- rbind(date1, date2, date3)
colnames(dr.df) <- a
dr.df <- as.data.frame(dr.df)
dr.df
#       exam1 exam2 exam3 exam4
# date1   8.2   4.3   6.7   3.9
# date2  11.2   9.3   6.5   4.1
# date3   8.2   9.1   4.3   4.4

«Перабудова» крок

Цяпер вы можаце проста выкарыстоўваць Stack , каб атрымаць дадзеныя ў доўгай форме.

dr.dfL <- data.frame(stack(dr.df), date = rownames(dr.df))

Значэння вектара вы хочаце ў калонцы «значэння», а назвы для гэтых значэнняў можна атрымаць, выкарыстоўваючы ўстаўкі .

setNames(dr.dfL$values, paste(dr.dfL$ind, dr.dfL$date, sep = "_"))
# exam1_date1 exam1_date2 exam1_date3 exam2_date1 exam2_date2 exam2_date3 
#         8.2        11.2         8.2         4.3         9.3         9.1 
# exam3_date1 exam3_date2 exam3_date3 exam4_date1 exam4_date2 exam4_date3 
#         6.7         6.5         4.3         3.9         4.1         4.4 

Звярніце ўвагу, што вынік тут проста найменны вектар, а не data.frame , як і ў іншых адказах.

1
дададзена

Калі dr.df аб'ект быў data.frame замест матрыцы, вы можаце лёгка стварыць найменны вектар, як паказана ніжэй:

Стварыце свае дадзеныя, але як data.frame на гэты раз:

a <- c("exam1", "exam2", "exam3","exam4")
date1 <- c(8.2,4.3,6.7,3.9)
date2 <- c(11.2,9.3,6.5,4.1)
date3 <- c(8.2,9.1,4.3,4.4)
dr.df <- rbind(date1, date2, date3)
colnames(dr.df) <- a
dr.df <- as.data.frame(dr.df)
dr.df
#       exam1 exam2 exam3 exam4
# date1   8.2   4.3   6.7   3.9
# date2  11.2   9.3   6.5   4.1
# date3   8.2   9.1   4.3   4.4

«Перабудова» крок

Цяпер вы можаце проста выкарыстоўваць Stack , каб атрымаць дадзеныя ў доўгай форме.

dr.dfL <- data.frame(stack(dr.df), date = rownames(dr.df))

Значэння вектара вы хочаце ў калонцы «значэння», а назвы для гэтых значэнняў можна атрымаць, выкарыстоўваючы ўстаўкі .

setNames(dr.dfL$values, paste(dr.dfL$ind, dr.dfL$date, sep = "_"))
# exam1_date1 exam1_date2 exam1_date3 exam2_date1 exam2_date2 exam2_date3 
#         8.2        11.2         8.2         4.3         9.3         9.1 
# exam3_date1 exam3_date2 exam3_date3 exam4_date1 exam4_date2 exam4_date3 
#         6.7         6.5         4.3         3.9         4.1         4.4 

Звярніце ўвагу, што вынік тут проста найменны вектар, а не data.frame , як і ў іншых адказах.

1
дададзена

Вы можаце выкарыстоўваць Reshape з базы R:

new <- reshape(dr, varying = list(c("date1","date2","date3")), direction = "long")
new$newname <- apply(new, 1, function(x) paste(x[1],paste("date",x[2],sep=""),sep="_"))
new <- new[,c("date1","newname")]
names(new) <- c("info","exam")

выхады:

> new
    info        exam
1.1  8.2 exam1_date1
2.1  4.3 exam2_date1
3.1  6.7 exam3_date1
4.1  3.9 exam4_date1
1.2 11.2 exam1_date2
2.2  9.3 exam2_date2
3.2  6.5 exam3_date2
4.2  4.1 exam4_date2
1.3  8.2 exam1_date3
2.3  9.1 exam2_date3
3.3  4.3 exam3_date3
4.3  4.4 exam4_date3
0
дададзена
Гэта вельмі добрае рашэнне, але мне трэба шырокі фармат, і я зараз спіс аб'ектаў з кадрамі некалькі дадзеных.
дададзена аўтар Rafik Margaryan, крыніца

Вы можаце выкарыстоўваць Reshape з базы R:

new <- reshape(dr, varying = list(c("date1","date2","date3")), direction = "long")
new$newname <- apply(new, 1, function(x) paste(x[1],paste("date",x[2],sep=""),sep="_"))
new <- new[,c("date1","newname")]
names(new) <- c("info","exam")

выхады:

> new
    info        exam
1.1  8.2 exam1_date1
2.1  4.3 exam2_date1
3.1  6.7 exam3_date1
4.1  3.9 exam4_date1
1.2 11.2 exam1_date2
2.2  9.3 exam2_date2
3.2  6.5 exam3_date2
4.2  4.1 exam4_date2
1.3  8.2 exam1_date3
2.3  9.1 exam2_date3
3.3  4.3 exam3_date3
4.3  4.4 exam4_date3
0
дададзена
Гэта вельмі добрае рашэнне, але мне трэба шырокі фармат, і я зараз спіс аб'ектаў з кадрамі некалькі дадзеных.
дададзена аўтар Rafik Margaryan, крыніца

Вы можаце выкарыстоўваць Reshape з базы R:

new <- reshape(dr, varying = list(c("date1","date2","date3")), direction = "long")
new$newname <- apply(new, 1, function(x) paste(x[1],paste("date",x[2],sep=""),sep="_"))
new <- new[,c("date1","newname")]
names(new) <- c("info","exam")

выхады:

> new
    info        exam
1.1  8.2 exam1_date1
2.1  4.3 exam2_date1
3.1  6.7 exam3_date1
4.1  3.9 exam4_date1
1.2 11.2 exam1_date2
2.2  9.3 exam2_date2
3.2  6.5 exam3_date2
4.2  4.1 exam4_date2
1.3  8.2 exam1_date3
2.3  9.1 exam2_date3
3.3  4.3 exam3_date3
4.3  4.4 exam4_date3
0
дададзена
Гэта вельмі добрае рашэнне, але мне трэба шырокі фармат, і я зараз спіс аб'ектаў з кадрамі некалькі дадзеных.
дададзена аўтар Rafik Margaryan, крыніца