একটি তালিকা একটি ডেটা ফ্রেমে রূপান্তর করুন


513

আমার কাছে নেস্টেড ডেটা তালিকা রয়েছে। এর দৈর্ঘ্য 132 এবং প্রতিটি আইটেম 20 দৈর্ঘ্যের একটি তালিকা there সেখানে কি দ্রুত আছে? উপায় 132 সারি এবং ডেটার 20 কলাম আছে যা একটি ডাটা ফ্রেম এই কাঠামো কনভার্ট করবেন?

এখানে কাজ করার জন্য কয়েকটি নমুনা তথ্য রয়েছে:

l <- replicate(
  132,
  list(sample(letters, 20)),
  simplify = FALSE
)

সুতরাং আপনি প্রতিটি ডাটা উপাদানটি আপনার ডেটা.ফ্রেমে ডেটার সারি হিসাবে চান?
জোশুয়া উলরিচ

2
@ রিচিকটন এটি সঠিক উদাহরণ নয়। "প্রতিটি আইটেম দৈর্ঘ্যের 20 এর তালিকা " এবং আপনি প্রতিটি আইটেম 20 দৈর্ঘ্যের ভেক্টরের একটি উপাদান তালিকা পেয়েছেন
মারেক

1
পক্ষের কাছে মরহুম, কিন্তু আমি দেখতে পাইনি যে কাউকে উল্লেখ এই , যা আমি চিন্তা খুব কুশলী ছিল (আমি কি করতে খুঁজছেন ছিল জন্য)।
এমফ্লো-বাই বাই


উত্তর:


390

আপনার তালিকাগুলির তালিকাকে ধরে নিলে বলা হয় l:

df <- data.frame(matrix(unlist(l), nrow=length(l), byrow=T))

উপরেরগুলি সমস্ত অক্ষর কলামকে উপাদানগুলিতে রূপান্তরিত করবে, এড়াতে আপনি ডেটা.ফ্রেম () কলটিতে একটি পরামিতি যুক্ত করতে পারেন:

df <- data.frame(matrix(unlist(l), nrow=132, byrow=T),stringsAsFactors=FALSE)

109
আপনার ডেটা যদি একই ধরণের না হয় তবে এখানে সাবধান। ম্যাট্রিক্সের মধ্য দিয়ে যাওয়ার অর্থ হ'ল সমস্ত ডেটা একটি সাধারণ ধরণে জোর করা হবে। উদাহরণস্বরূপ, যদি আপনার কাছে অক্ষর ডেটাগুলির একটি কলাম এবং সংখ্যাসূচক তথ্যগুলির একটি কলাম থাকে তবে সংখ্যার ডেটা ম্যাট্রিক্স () দ্বারা স্ট্রিংয়ে জোর করা হবে এবং তারপরে উভয়ই ডেটা ফ্রেম () দ্বারা ফ্যাক্টর হবে।
ইয়ান সুদবারি

তালিকার মানগুলি অনুপস্থিত রয়েছে, বা ডাটা ফ্রেমে এনএ অন্তর্ভুক্ত করার জন্য এটি করার সর্বোত্তম উপায় কী?
ডেভ

1
@Dave: আমার জন্য কাজ করে ... এখানে দেখতে r-fiddle.org/#/fiddle?id=y8DW7lqL&version=3
নিকো

4
আপনার যদি চরিত্রের ডেটা টাইপ থাকে সেদিকেও খেয়াল রাখুন - ডেটা.ফ্রেম এটিকে উপাদানগুলিতে রূপান্তর করবে।
অ্যালেক্স ব্রাউন

4
@nico তালিকার উপাদানগুলির নামকে ডিএফ-এ কলোনাম বা রোমনাম হিসাবে রাখার কোনও উপায় আছে?
এন.ওরেলা

472

সঙ্গে rbind

do.call(rbind.data.frame, your_list)

সম্পাদনা: পূর্ববর্তী সংস্করণ প্রত্যাবর্তন data.frameএর list'ভেক্টর পরিবর্তে গুলি (যেমন @IanSudbery মন্তব্য নির্দিষ্ট)।


5
কেন এটি কাজ করে তবে rbind(your_list)1x32 তালিকার ম্যাট্রিক্স দেয়?
ekkanal

26
@eykanal যুক্তি হিসাবে do.callউপাদানগুলি পাস । এটা সমতুল্য । your_listrbindrbind(your_list[[1]], your_list[[2]], your_list[[3]], ....., your_list[[length of your_list]])
মারেক

2
এই পদ্ধতিটি নাল পরিস্থিতি ভোগ করে।
ফ্রাঙ্ক ওয়াং

3
@ ফ্র্যাঙ্কওয়াং তবে এই পদ্ধতিটি পরিস্থিতি শূন্য করার জন্য ডিজাইন করা হয়নি। এটি প্রয়োজনীয় যা your_listসমান আকারের ভেক্টর ধারণ করে। NULLদৈর্ঘ্য 0 রয়েছে তাই এটি ব্যর্থ হওয়া উচিত।
মারেক

12
এই পদ্ধতিটি সঠিক অবজেক্টটি প্রত্যাবর্তন করবে বলে মনে হচ্ছে তবে অবজেক্টটি পরিদর্শন করার পরে আপনি দেখতে পাবেন যে কলামগুলি ভেক্টরগুলির পরিবর্তে তালিকাগুলি রয়েছে, এটি যদি আপনি প্রত্যাশা না করেন তবে লাইনে সমস্যা তৈরি হতে পারে।
ইয়ান সুদবারি

135

আপনি plyrপ্যাকেজ ব্যবহার করতে পারেন । উদাহরণস্বরূপ ফর্মের নেস্টেড তালিকা

l <- list(a = list(var.1 = 1, var.2 = 2, var.3 = 3)
      , b = list(var.1 = 4, var.2 = 5, var.3 = 6)
      , c = list(var.1 = 7, var.2 = 8, var.3 = 9)
      , d = list(var.1 = 10, var.2 = 11, var.3 = 12)
      )

এখন 4 এর দৈর্ঘ্য এবং প্রতিটি তালিকার 3 টি দৈর্ঘ্যের আরও একটি তালিকা lরয়েছে Now এখন আপনি চালাতে পারেন

  library (plyr)
  df <- ldply (l, data.frame)

এবং @Marek এবং @nico উত্তর হিসাবে একই ফলাফল পাওয়া উচিত।


8
দুর্দান্ত উত্তর। আমি আপনাকে একটু ব্যাখ্যা করতে পারি যে কিভাবে কাজ করে? এটি কেবল প্রতিটি তালিকার প্রবেশের জন্য একটি ডেটা ফ্রেম ফেরায়?
মাইকেল বার্টন

13
ইমো সেরা উত্তর। এটি একটি সৎ ডেটা.ফ্রেম দেয়। সমস্ত ডেটা ধরণের (অক্ষর, সংখ্যাগত ইত্যাদি) সঠিকভাবে রূপান্তরিত হয়। যদি তালিকার বিভিন্ন ডেটা ধরণের থাকে তবে এগুলি সমস্ত matrixপদ্ধতির সাথে অক্ষরে রূপান্তরিত হবে।
রোহ

1
এখানে প্রদত্ত নমুনা প্রশ্নের দ্বারা সরবরাহিত এক নয়। মূল ডেটাসেটে এই উত্তরের ফলাফলটি ভুল।
মাইস্কিজোবাডি

আমার জন্য দুর্দান্ত কাজ! এবং ফলাফল ডেটা ফ্রেমে কলামগুলির নাম সেট করা আছে! Tx
নিষিদ্ধ করুন

প্লাইর মাল্টিকোর হয়? অথবা ম্যাক্লেপ্লি ব্যবহারের জন্য কোনও ল্যাপ্লি সংস্করণ রয়েছে?
গার্গলসোপ

103

data.frame(t(sapply(mylistlist,c)))

sapplyএটিকে ম্যাট্রিক্সে রূপান্তরিত করে। data.frameম্যাট্রিক্সকে একটি ডেটা ফ্রেমে রূপান্তরিত করে।


19
এখন পর্যন্ত সেরা উত্তর! অন্য কোনও সমাধানের ধরণ / কলামের নাম সঠিক হয় না। ধন্যবাদ!
d_a_c321

1
cতালিকার ডেটাগুলির একটি উদাহরণ, আপনি এখানে কী ভূমিকা নিতে চান ? ওহ অপেক্ষা করুন, কনকনেট ফাংশনের জন্য সি? @ মণেলের সি ব্যবহারের সাথে বিভ্রান্ত হওয়া। আমি @ ডিচেন্ডলারের সাথেও একমত হয়েছি, কলামের নামগুলি পাওয়া আমার ব্যবহারের ক্ষেত্রে এক মূল্যবান প্রয়োজন ছিল। উজ্জ্বল সমাধান।
jxramos

যে অধিকার - মান সি ফাংশন; থেকে ?c:Combine Values into a Vector or List
অ্যালেক্স ব্রাউন 21

1
প্রশ্নের প্রদত্ত নমুনা ডেটা নিয়ে কাজ করে না
মাইস্কিজোবাডি

3
এটি তালিকার ডেটা ফ্রেম তৈরি করে না?
কার্ল

69

ধরুন আপনার তালিকা বলা হয়েছে L,

data.frame(Reduce(rbind, L))

2
সুন্দর! আপনার তুলনায় @ অ্যালেক্স ব্রাউন এর সমাধানের সাথে একটি পার্থক্য রয়েছে, আপনার রুটটি কিছু কারণে নিম্নলিখিত সতর্কতা বার্তাটি পেয়েছে: ning সতর্কতা বার্তা: ডেটা.্রো.নেমস (সারি.নামস, রৌসি, আই): কিছু সারি.নামগুলি নকল : 3,4 -> সারি.নামগুলি ব্যবহৃত হয়নি '
jxramos

খুব ভালো!! : আমাকে এখানে কাজ করেন stackoverflow.com/questions/32996321/...
Anastasia Pupynina

2
তালিকায় কেবলমাত্র একটি উপাদান না থাকলে ভাল কাজ করে: 2 সারি, 1 কলামdata.frame(Reduce(rbind, list(c('col1','col2')))) সহ একটি ডেটা ফ্রেম তৈরি করে (আমি 1 সারি 2 কলাম আশা করেছি)
রেড মটর

61

প্যাকেজটির একটি data.tableকার্যকারিতা রয়েছে rbindlistযা একটি সুপারফেস বাস্তবায়নdo.call(rbind, list(...))

এটা তোলে একটি তালিকা গ্রহণ করতে পারেন lists, data.framesঅথবা data.tables ইনপুট হিসাবে।

library(data.table)
ll <- list(a = list(var.1 = 1, var.2 = 2, var.3 = 3)
  , b = list(var.1 = 4, var.2 = 5, var.3 = 6)
  , c = list(var.1 = 7, var.2 = 8, var.3 = 9)
  , d = list(var.1 = 10, var.2 = 11, var.3 = 12)
  )

DT <- rbindlist(ll)

এটি data.tableথেকে উত্তরাধিকার সূত্রে ফিরে আসেdata.frame

আপনি যদি সত্যিই কোনও ডেটাতে পরিবর্তন করতে চান তবে ফ্রেম ব্যবহার করুনas.data.frame(DT)


শেষ লাইনটি সম্পর্কিত, setDFএখন রেফারেন্স দ্বারা ডেটা.ফ্রেমে ফিরে যাওয়ার অনুমতি দেয়।
ফ্র্যাঙ্ক

1
30 কে আইটেম সহ আমার তালিকার জন্য, rbindlist এলডিপ্লাইয়ের চেয়ে দ্রুত গতিতে কাজ করেছে
লম্বারিশ

35

tibbleপ্যাকেজের মাধ্যমে একটি ফাংশন আছে enframe()যে সমাধান নেস্টেড উপর চাপ করে আপনি এই সমস্যার listনেস্টেড করার বস্তু tibble( "পরিপাটি" তথ্য ফ্রেম) বস্তু। ডেটা সায়েন্সের জন্য আর এর সংক্ষিপ্ত উদাহরণ এখানে :

x <- list(
    a = 1:5,
    b = 3:4, 
    c = 5:6
) 

df <- enframe(x)
df
#> # A tibble: 3 × 2
#>    name     value
#>   <chr>    <list>
#>    1     a <int [5]>
#>    2     b <int [2]>
#>    3     c <int [2]>

যেহেতু আপনার তালিকায় বেশ কয়েকটি বাসা রয়েছে তাই আপনি কেবল একটি একক শ্রেণিবদ্ধ তালিকা পেতে অপ্রয়োজনীয় বাসা বাঁধতে এবং lব্যবহার করতে পারেন । আমি আউটপুটটিকে একক স্তরের "পরিপাটি" ডেটা ফ্রেমে আনইনস্ট করতে ব্যবহার করি , এতে আপনার দুটি কলাম রয়েছে (একটি দলের জন্য এবং একটি দলগুলির সাথে পর্যবেক্ষণের জন্য )। আপনি যদি কলামগুলি প্রশস্ত করে তুলতে চান তবে আপনি 132 বার মানগুলির ক্রম পুনরাবৃত্তি করে একটি কলাম যুক্ত করতে পারেন । তারপর শুধু মান।unlist(recursive = FALSE)enframe()tidyr::unnest()namevalueadd_column()spread()


library(tidyverse)

l <- replicate(
    132,
    list(sample(letters, 20)),
    simplify = FALSE
)

l_tib <- l %>% 
    unlist(recursive = FALSE) %>% 
    enframe() %>% 
    unnest()
l_tib
#> # A tibble: 2,640 x 2
#>     name value
#>    <int> <chr>
#> 1      1     d
#> 2      1     z
#> 3      1     l
#> 4      1     b
#> 5      1     i
#> 6      1     j
#> 7      1     g
#> 8      1     w
#> 9      1     r
#> 10     1     p
#> # ... with 2,630 more rows

l_tib_spread <- l_tib %>%
    add_column(index = rep(1:20, 132)) %>%
    spread(key = index, value = value)
l_tib_spread
#> # A tibble: 132 x 21
#>     name   `1`   `2`   `3`   `4`   `5`   `6`   `7`   `8`   `9`  `10`  `11`
#> *  <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1      1     d     z     l     b     i     j     g     w     r     p     y
#> 2      2     w     s     h     r     i     k     d     u     a     f     j
#> 3      3     r     v     q     s     m     u     j     p     f     a     i
#> 4      4     o     y     x     n     p     i     f     m     h     l     t
#> 5      5     p     w     v     d     k     a     l     r     j     q     n
#> 6      6     i     k     w     o     c     n     m     b     v     e     q
#> 7      7     c     d     m     i     u     o     e     z     v     g     p
#> 8      8     f     s     e     o     p     n     k     x     c     z     h
#> 9      9     d     g     o     h     x     i     c     y     t     f     j
#> 10    10     y     r     f     k     d     o     b     u     i     x     s
#> # ... with 122 more rows, and 9 more variables: `12` <chr>, `13` <chr>,
#> #   `14` <chr>, `15` <chr>, `16` <chr>, `17` <chr>, `18` <chr>,
#> #   `19` <chr>, `20` <chr>

ওপিকে উদ্ধৃত করে: "132 সারি এবং 20 টি কলামের ডেটাযুক্ত এই কাঠামোটিকে কোনও ডেটা ফ্রেমে রূপান্তর করার কোনও দ্রুত উপায় আছে?" সুতরাং সম্ভবত আপনার একটি স্প্রেড স্টেপ বা কিছু দরকার।
ফ্রাঙ্ক

1
হ্যাঁ হ্যাঁ, কেবলমাত্র একটি সূচী কলাম থাকা দরকার যা ছড়িয়ে পড়ে। আমি শীঘ্রই আপডেট করব।
ম্যাট ড্যাঞ্চো

17

আপনার তালিকার কাঠামোর উপর নির্ভর করে কিছু tidyverseঅপশন রয়েছে যা অসম দৈর্ঘ্যের তালিকার সাথে দুর্দান্তভাবে কাজ করে:

l <- list(a = list(var.1 = 1, var.2 = 2, var.3 = 3)
        , b = list(var.1 = 4, var.2 = 5)
        , c = list(var.1 = 7, var.3 = 9)
        , d = list(var.1 = 10, var.2 = 11, var.3 = NA))

df <- dplyr::bind_rows(l)
df <- purrr::map_df(l, dplyr::bind_rows)
df <- purrr::map_df(l, ~.x)

# all create the same data frame:
# A tibble: 4 x 3
  var.1 var.2 var.3
  <dbl> <dbl> <dbl>
1     1     2     3
2     4     5    NA
3     7    NA     9
4    10    11    NA

আপনি ভেক্টর এবং ডেটা ফ্রেমগুলিও মিশ্রিত করতে পারেন:

library(dplyr)
bind_rows(
  list(a = 1, b = 2),
  data_frame(a = 3:4, b = 5:6),
  c(a = 7)
)

# A tibble: 4 x 2
      a     b
  <dbl> <dbl>
1     1     2
2     3     5
3     4     6
4     7    NA

এই dplyr :: bind_rows ফাংশনটি ভাল কাজ করে, এমনকি JSON হিসাবে উত্পন্ন তালিকাগুলি সহ কঠোরভাবে কাজ করে। জেএসএন থেকে আশ্চর্যজনকভাবে পরিষ্কার ডেটাফ্রেমে। খুশী হলাম।
জিজিএন্ডারসন

@ শাভা আমি df <- purrr :: map_df (l, ~ .x) ব্যবহার করার চেষ্টা করেছি তবে মনে হচ্ছে এটি কাজ করছে না, আমার কাছে থাকা ত্রুটি বার্তাটি ত্রুটি: কলামটি X2পূর্ণসংখ্যার থেকে চরিত্রে রূপান্তরিত হতে পারে না
জোলিন

16

পুনরায় আকার 2 উপরের প্লাইর উদাহরণ হিসাবে একই আউটপুট উত্পাদন করে:

library(reshape2)
l <- list(a = list(var.1 = 1, var.2 = 2, var.3 = 3)
          , b = list(var.1 = 4, var.2 = 5, var.3 = 6)
          , c = list(var.1 = 7, var.2 = 8, var.3 = 9)
          , d = list(var.1 = 10, var.2 = 11, var.3 = 12)
)
l <- melt(l)
dcast(l, L1 ~ L2)

উৎপাদনের:

  L1 var.1 var.2 var.3
1  a     1     2     3
2  b     4     5     6
3  c     7     8     9
4  d    10    11    12

আপনি যদি প্রায় পিক্সেল থেকে বাইরে থাকেন তবে আপনি 1 লাইন ডাব্লু / রিস্যাক্ট () এ সব করতে পারেন।


12

এই পদ্ধতিতে একটি tidyverseপ্যাকেজ ব্যবহার করা হয় ( purrr) ) ব্যবহার করা হয়।

ক্রমতালিকা:

x <- as.list(mtcars)

এটিকে ডেটা ফ্রেমে রূপান্তর করা ( tibbleআরও সুনির্দিষ্টভাবে):

library(purrr)
map_df(x, ~.x)

10

@ মারেকের জবাবকে বাড়ানো: আপনি যদি স্ট্রিংগুলিকে ফ্যাক্টর এবং দক্ষতায় পরিণত করতে চান তবে এড়াতে চান তা উদ্বেগের চেষ্টা নয়

do.call(rbind, lapply(your_list, data.frame, stringsAsFactors=FALSE))

10

নেস্টেড জেএসওএন থেকে প্রাপ্তদের মতো 3 বা ততোধিক স্তর সহ গভীরভাবে নেস্টেড তালিকার সাধারণ ক্ষেত্রে :

{
"2015": {
  "spain": {"population": 43, "GNP": 9},
  "sweden": {"population": 7, "GNP": 6}},
"2016": {
  "spain": {"population": 45, "GNP": 10},
  "sweden": {"population": 9, "GNP": 8}}
}

melt()নেস্টেড তালিকাটিকে প্রথমে লম্বা ফর্ম্যাটে রূপান্তর করার পদ্ধতির বিষয়টি বিবেচনা করুন :

myjson <- jsonlite:fromJSON(file("test.json"))
tall <- reshape2::melt(myjson)[, c("L1", "L2", "L3", "value")]
    L1     L2         L3 value
1 2015  spain population    43
2 2015  spain        GNP     9
3 2015 sweden population     7
4 2015 sweden        GNP     6
5 2016  spain population    45
6 2016  spain        GNP    10
7 2016 sweden population     9
8 2016 sweden        GNP     8

দ্বারা অনুসরণ dcast()একটি পরিপাটি ডেটা সেটটি যেখানে প্রতিটি পরিবর্তনশীল এএ কলাম এবং প্রতিটি পর্যবেক্ষণ ফর্ম একটি সারিতে ফর্মগুলিতে ওয়াইড আবার তারপর:

wide <- reshape2::dcast(tall, L1+L2~L3) 
# left side of the formula defines the rows/observations and the 
# right side defines the variables/measurements
    L1     L2 GNP population
1 2015  spain   9         43
2 2015 sweden   6          7
3 2016  spain  10         45
4 2016 sweden   8          9

9

এই প্রশ্নের উত্তরে সময় সহ আরও উত্তর: ডেটা ফ্রেম হিসাবে তালিকা কাস্ট করার সবচেয়ে কার্যকরী উপায় কী?

দ্রুততম উপায়, এটি কলামগুলির জন্য ভেক্টরগুলির পরিবর্তে তালিকাগুলির সাথে ডেটাফ্রেম তৈরি করে না বলে মনে হয় (মার্টিন মরগানের উত্তর থেকে):

l <- list(list(col1="a",col2=1),list(col1="b",col2=2))
f = function(x) function(i) unlist(lapply(x, `[[`, i), use.names=FALSE)
as.data.frame(Map(f(l), names(l[[1]])))

8

কখনও কখনও আপনার ডেটা একই দৈর্ঘ্যের ভেক্টরগুলির তালিকার একটি তালিকা হতে পারে।

lolov = list(list(c(1,2,3),c(4,5,6)), list(c(7,8,9),c(10,11,12),c(13,14,15)) )

(অভ্যন্তরীণ ভেক্টরগুলিও তালিকাগুলি হতে পারে তবে আমি এটি সহজভাবে পড়তে সহজ করে তুলছি)।

তারপরে আপনি নিম্নলিখিত পরিবর্তন করতে পারেন। মনে রাখবেন যে আপনি একবারে এক স্তরকে তালিকাভুক্ত করতে পারেন:

lov = unlist(lolov, recursive = FALSE )
> lov
[[1]]
[1] 1 2 3

[[2]]
[1] 4 5 6

[[3]]
[1] 7 8 9

[[4]]
[1] 10 11 12

[[5]]
[1] 13 14 15

অন্যান্য উত্তরে উল্লিখিত আপনার প্রিয় পদ্ধতিটি ব্যবহার করুন:

library(plyr)
>ldply(lov)
  V1 V2 V3
1  1  2  3
2  4  5  6
3  7  8  9
4 10 11 12
5 13 14 15


4
l <- replicate(10,list(sample(letters, 20)))
a <-lapply(l[1:10],data.frame)
do.call("cbind", a)

3

সমাধানের purrrপরিবার ব্যবহার করে সমান্তরাল (মাল্টিকোর, মাল্টিসেশন ইত্যাদি) সমাধানের জন্য, ব্যবহার করুন:

library (furrr)
plan(multisession) # see below to see which other plan() is the more efficient
myTibble <- future_map_dfc(l, ~.x)

lতালিকা কোথায় ।

সর্বাধিক দক্ষ plan()আপনি ব্যবহার করতে পারেন মানদণ্ড করতে:

library(tictoc)
plan(sequential) # reference time
# plan(multisession) # benchamark plan() goes here. See ?plan().
tic()
myTibble <- future_map_dfc(l, ~.x)
toc()

3

নিম্নলিখিত সহজ কমান্ডটি আমার পক্ষে কাজ করেছে:

myDf <- as.data.frame(myList)

রেফারেন্স ( কোওর উত্তর )

> myList <- list(a = c(1, 2, 3), b = c(4, 5, 6))
> myList
$a
[1] 1 2 3

$b
[1] 4 5 6

> myDf <- as.data.frame(myList)
  a b
1 1 4
2 2 5
3 3 6
> class(myDf)
[1] "data.frame"

তবে কীভাবে তালিকাটি ডেটা ফ্রেমে রূপান্তর করা যায় তা স্পষ্ট না হলে এটি ব্যর্থ হবে:

> myList <- list(a = c(1, 2, 3), b = c(4, 5, 6, 7))
> myDf <- as.data.frame(myList)
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : 
  arguments imply differing number of rows: 3, 4

দ্রষ্টব্য : উত্তরটি প্রশ্নের শিরোনামের দিকে রয়েছে এবং প্রশ্নের কিছু বিবরণ এড়িয়ে যেতে পারে


একটি নোট যে প্রশ্ন থেকে ইনপুট নেভিগেশন এই ধরণের কাজ করে। ওপি 132 টি সারি এবং 20 টি কলামের জন্য জিজ্ঞাসা করে তবে এটি 20 সারি এবং 132 কলাম দেয়।
গ্রেগর টমাস

বিভিন্ন দৈর্ঘ্যের ইনপুট সহ যেখানে এটি ব্যর্থ হয় তা উদাহরণস্বরূপ, পছন্দসই ফলাফলটি কী হবে তা পরিষ্কার নয় ...
গ্রেগর থমাস

@ গ্রেগর ট্রু, তবে প্রশ্নের শিরোনাম হ'ল "আর - ডেটা ফ্রেমের তালিকা"। প্রশ্নের অনেক দর্শক এবং যারা এটি ভোট দিয়েছিলেন তাদের ওপির সঠিক সমস্যা নেই। প্রশ্নের শিরোনামের ভিত্তিতে, তারা কেবল তালিকা ফ্রেমতে রূপান্তর করার জন্য একটি উপায় সন্ধান করে। আমার নিজেও একই সমস্যা ছিল এবং আমার পোস্ট করা সমাধানটি আমার সমস্যার সমাধান করে
আহমাদ

হ্যাঁ, ঠিক লক্ষণীয়। ডাউনভোটিং নয় উত্তরে এটি উল্লেখ করা ভাল হতে পারে যে এটি অনুরূপ কিছু করে - তবে এর চেয়ে স্বতন্ত্র - অন্য সমস্ত উত্তরগুলির চেয়েও অনেক বেশি।
গ্রেগর থমাস

1

এটি করার একটি ছোট (তবে সম্ভবত দ্রুততম নয়) উপায়টি বেস আর ব্যবহার করা হবে, যেহেতু একটি ডেটা ফ্রেম কেবল সমান দৈর্ঘ্যের ভেক্টরগুলির একটি তালিকা । সুতরাং আপনার ইনপুট তালিকা এবং 30 x 132 ডেটা ফ্রেমের মধ্যে রূপান্তরটি হ'ল:

df <- data.frame(l)

সেখান থেকে আমরা এটিকে 132 x 30 ম্যাট্রিক্সে স্থানান্তর করতে পারি এবং এটি আবার ডেটাফ্রেমে রূপান্তর করতে পারি:

new_df <- data.frame(t(df))

ওয়ান-লাইনার হিসাবে:

new_df <- data.frame(t(data.frame(l)))

রওনমগুলি দেখতে বেশ বিরক্তিকর হবে তবে আপনি যাঁদের সাথে সর্বদা নাম পরিবর্তন করতে পারেন

rownames(new_df) <- 1:nrow(new_df)


2
কেন এই নিম্নমানের ছিল? আমি জানতে চাই যাতে ভুল তথ্য ছড়িয়ে দেওয়া চালিয়ে যাই না।
সি 19

আমি ডেটা.ফ্রেম এবং টি এর সংমিশ্রণটি ব্যবহার করে অবশ্যই এটি আগে করেছি! আমি অনুমান করি যে লোকেরা অনুভূত হয় যে আরও ভাল উপায় রয়েছে, বিশেষত যারা নাম জগাখিচুড়ি করে না।
আর্থার ইপ

1
এটি একটি ভাল বিষয়, আমার ধারণা আপনি যদি নিজের তালিকায় নাম সংরক্ষণ করতে চান তবে এটিও ভুল।
সি

0

map_একটি forলুপের সাথে একসাথে ফাংশন ব্যবহার সম্পর্কে কীভাবে ? এখানে আমার সমাধান:

list_to_df <- function(list_to_convert) {
  tmp_data_frame <- data.frame()
  for (i in 1:length(list_to_convert)) {
    tmp <- map_dfr(list_to_convert[[i]], data.frame)
    tmp_data_frame <- rbind(tmp_data_frame, tmp)
  }
  print(tmp_data_frame)
}

যেখানে map_dfrতালিকার প্রতিটি উপাদানকে একটি ডেটা.ফ্রেমে রূপান্তর করুন এবং তারপরে rbindতাদের সম্পূর্ণ মিলিত করুন।

আপনার ক্ষেত্রে, আমি অনুমান করি এটি হবে:

converted_list <- list_to_df(l)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.